from django.test import TestCase
from django.urls import reverse

from jobs.category_data import sync_pezajob_categories
from jobs.models import Job, JobCategory
from jobs.recommendations import recommended_jobs_for_profile
from seekers.models import SeekerProfile


class JobSearchFilterTests(TestCase):
    @classmethod
    def setUpTestData(cls):
        sync_pezajob_categories(deactivate_unknown=False)
        cls.hr = JobCategory.objects.get(slug='human-resources-people')
        cls.engineering = JobCategory.objects.get(slug='engineering')
        Job.objects.create(
            title='HR Officer',
            slug='hr-officer',
            company_name='Mine Co',
            company_initials='MC',
            location='Lusaka',
            company_industry='Mining',
            description='HR role',
            responsibilities='HR',
            requirements='HR degree',
            category=cls.hr,
            is_active=True,
        )
        Job.objects.create(
            title='Mechanical Engineer',
            slug='mech-engineer',
            company_name='Mine Co',
            company_initials='MC',
            location='Lusaka',
            company_industry='Mining',
            description='Engineering',
            responsibilities='Design',
            requirements='Engineering degree',
            category=cls.engineering,
            is_active=True,
        )

    def test_filter_by_category_and_industry_together(self):
        url = reverse('jobs:list')
        response = self.client.get(url, {'category': self.hr.slug, 'industry': 'Mining'})
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'HR Officer')
        self.assertNotContains(response, 'Mechanical Engineer')

    def test_recommended_jobs_prioritise_profile_category(self):
        profile = SeekerProfile.objects.create(
            slug='hr-seeker',
            full_name='HR Seeker',
            headline='HR Generalist',
            job_category=self.hr,
            category=self.hr.name,
            category_slug=self.hr.slug,
            location='Lusaka',
        )
        jobs = recommended_jobs_for_profile(profile, limit=4)
        titles = [job.title for job in jobs]
        self.assertIn('HR Officer', titles)
