from django.contrib.auth import get_user_model
from django.test import TestCase

from portfolio.models import Project, Skill, StudentProfile
from resume.keyword_extractor import extract_keywords
from resume.matcher import match_portfolio, match_with_portfolio
from resume.services.keyword_extractor import extract_keywords as extract_keywords_svc
from resume.services.matcher import match_portfolio as match_portfolio_svc

User = get_user_model()


class ResumeAlgorithmTest(TestCase):
    def test_keyword_extraction(self):
        vacancy = "Ищем Python разработчика с Django"
        keywords = extract_keywords(vacancy)
        self.assertIn("python", keywords["skills"])
        self.assertIn("django", keywords["technologies"])
        self.assertIn("vacancy_summary", keywords)
        self.assertTrue(len(keywords["vacancy_summary"]) > 0)

    def test_services_imports(self):
        vacancy = "Python Django"
        k1 = extract_keywords(vacancy)
        k2 = extract_keywords_svc(vacancy)
        self.assertEqual(k1, k2)

    def test_empty_vacancy(self):
        keywords = extract_keywords("")
        self.assertEqual(keywords["skills"], [])
        self.assertEqual(keywords["technologies"], [])
        self.assertEqual(keywords["soft_skills"], [])
        self.assertEqual(keywords.get("vacancy_summary"), "")

    def test_match_portfolio_alias(self):
        user = User.objects.create_user(
            username="t_algo",
            email="algo@test.local",
            password="pass12345",
        )
        profile = StudentProfile.objects.create(
            user=user,
            first_name="A",
            last_name="B",
            student_group="G-1",
        )
        Skill.objects.create(
            student=profile, name="Python", level=Skill.Level.INTERMEDIATE
        )
        Project.objects.create(
            student=profile,
            title="Django shop",
            project_type=Project.ProjectType.PERSONAL,
            description="REST API on Django",
            technologies="django, python",
        )
        kw = extract_keywords("Нужен python и django разработчик")
        r1 = match_with_portfolio(profile, kw)
        r2 = match_portfolio_svc(profile, kw)
        self.assertEqual(r1["has_match"], r2["has_match"])
