from django.test import TestCase

from jobs.admin_forms import JobAdminForm
from jobs.category_data import sync_pezajob_categories
from jobs.models import Job, JobCategory


class JobAdminFormTests(TestCase):
    @classmethod
    def setUpTestData(cls):
        sync_pezajob_categories(deactivate_unknown=False)
        cls.job_category = JobCategory.objects.get(slug='information-technology-software')

    def test_remote_job_admin_form_saves_structured_location(self):
        data = {
            'title': 'Admin Remote Role',
            'slug': 'admin-remote-role',
            'company_name': 'Admin Co',
            'company_slug': 'admin-co',
            'company_initials': 'AC',
            'company_logo_gradient': 'linear-gradient(135deg,#2c3e50,#34495e)',
            'company_industry': 'Information Technology & Software',
            'category': self.job_category.pk,
            'location_scope': 'single',
            'job_type': 'remote',
            'location_country': 'ZM',
            'location_region': 'Lusaka Province',
            'location_city': 'Lusaka',
            'location_regions_multi': [],
            'location_city_text': '',
            'experience_level': 'mid',
            'experience_required': '',
            'description': 'Remote listing.',
            'responsibilities': 'Work',
            'requirements': 'Skills',
            'benefits': '',
            'positions_total': 1,
            'positions_filled': 0,
            'application_methods': ['email'],
            'how_to_apply': 'Apply by email',
            'deadline': '',
            'is_active': True,
            'is_featured': False,
            'badge': '',
            'views_count': 0,
        }
        form = JobAdminForm(data)
        self.assertTrue(form.is_valid(), form.errors)
        job = form.save()
        self.assertEqual(job.job_type, Job.JobType.REMOTE)
        self.assertEqual(job.location, 'Lusaka, Lusaka Province, Zambia')

    def test_admin_form_prefills_legacy_remote_location(self):
        job = Job.objects.create(
            title='Legacy Remote',
            company_name='Acme',
            company_initials='AC',
            location='Remote',
            job_type=Job.JobType.REMOTE,
            experience_level=Job.ExperienceLevel.MID,
            description='Desc',
            responsibilities='Work',
            requirements='Skills',
            is_active=True,
        )
        form = JobAdminForm(instance=job)
        self.assertEqual(form.fields['location_country'].initial, 'ZM')
        self.assertEqual(form.fields['location_region'].initial, '')
        self.assertEqual(form.fields['location_city'].initial, '')
