from django.contrib.auth import get_user_model
from django.test import TestCase, override_settings
from rest_framework import status
from rest_framework.test import APIClient

from portfolio.models import StudentProfile
from resume.models import ResumeTemplate

User = get_user_model()


@override_settings(RATELIMIT_ENABLE=False)
class ApiSmokeTests(TestCase):
    def setUp(self):
        self.client = APIClient()
        self.user = User.objects.create_user(
            username="api_student",
            email="student_api@test.local",
            password="TestPass123!",
            is_verified=True,
        )
        self.profile = StudentProfile.objects.create(
            user=self.user,
            first_name="Иван",
            last_name="Тестов",
            student_group="ИС-21",
        )
        self.tpl = ResumeTemplate.objects.create(
            name="T1",
            html_template="<p>{{ student.full_name }}</p>",
            css_styles="",
            is_active=True,
        )

    def _auth(self):
        r = self.client.post(
            "/api/auth/login/",
            {"email": self.user.email, "password": "TestPass123!"},
            format="json",
        )
        self.assertEqual(r.status_code, status.HTTP_200_OK)
        self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {r.data['access']}")

    def test_profile_get(self):
        self._auth()
        r = self.client.get("/api/profile/")
        self.assertEqual(r.status_code, status.HTTP_200_OK)
        self.assertEqual(r.data["student_group"], "ИС-21")

    def test_resume_analyze_and_preview(self):
        self._auth()
        r = self.client.post(
            "/api/resume/analyze/",
            {"vacancy_text": "python django sql"},
            format="json",
        )
        self.assertEqual(r.status_code, status.HTTP_200_OK)
        self.assertIn("keywords", r.data)

        r2 = self.client.post(
            "/api/resume/preview/",
            {
                "vacancy_text": "Нужен django",
                "template_id": self.tpl.id,
            },
            format="json",
        )
        self.assertEqual(r2.status_code, status.HTTP_200_OK)
        self.assertIn("html_content", r2.data)

    def test_openapi_schema(self):
        r = self.client.get("/api/schema/")
        self.assertEqual(r.status_code, status.HTTP_200_OK)
