from django.contrib.auth import get_user_model
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase

from jobs.models import Job

User = get_user_model()


class JobLogoDisplayTests(TestCase):
    def setUp(self):
        self.poster = User.objects.create_user(
            username='poster',
            email='poster@example.com',
            password='pass12345',
            role=User.Role.COMPANY,
        )
        self.poster.avatar = SimpleUploadedFile('avatar.jpg', b'avatar-bytes', content_type='image/jpeg')
        self.poster.save()

    def _job(self, **kwargs):
        defaults = {
            'title': 'Engineer',
            'slug': 'engineer',
            'company_name': 'Acme',
            'company_initials': 'AC',
            'location': 'Lusaka',
            'description': 'Role',
            'responsibilities': 'Work',
            'requirements': 'Skills',
            'posted_by': self.poster,
        }
        defaults.update(kwargs)
        return Job.objects.create(**defaults)

    def test_logo_uses_poster_avatar_by_default(self):
        job = self._job()
        job = Job.objects.select_related('posted_by').get(pk=job.pk)
        self.assertIn('avatar', job.logo_url)
        self.assertTrue(job.has_logo_image)

    def test_logo_prefers_uploaded_company_logo(self):
        job = self._job()
        job.company_logo = SimpleUploadedFile('company.png', b'logo-bytes', content_type='image/png')
        job.save()
        job = Job.objects.select_related('posted_by').get(pk=job.pk)
        self.assertIn('company.png', job.logo_url)

    def test_logo_falls_back_to_initials_without_avatar_or_logo(self):
        bare_user = User.objects.create_user(
            username='bare',
            email='bare@example.com',
            password='pass12345',
            role=User.Role.COMPANY,
        )
        job = self._job(posted_by=bare_user, slug='bare-job')
        job = Job.objects.select_related('posted_by').get(pk=job.pk)
        self.assertEqual(job.logo_url, '')
        self.assertFalse(job.has_logo_image)
