"""Personalized interview prep plans."""

from uuid import uuid4

from app.schemas.common import JobStatus
from app.schemas.prep_plans import PrepPlanRequest, PrepPlanResponse, PrepPlanSection
from app.services.ai_generate import generate_json


class PrepPlansService:
    async def generate(self, payload: PrepPlanRequest) -> PrepPlanResponse:
        system = (
            "Create a role-specific interview prep plan. "
            "Return JSON: {\"summary\",\"skill_gaps\":[],\"sections\":"
            "[{\"title\",\"items\":[],\"estimated_hours\"}],\"suggested_tracks\":[]}"
        )
        user = (
            f"Role: {payload.role_title}\nLevel: {payload.target_level}\n"
            f"JD:\n{payload.job_description}\n"
            f"Resume:\n{payload.resume_text or payload.resume_structured}\n"
            f"Focus skills: {payload.focus_skills}\nLanguage: {payload.language}"
        )

        def local() -> dict:
            gaps = payload.focus_skills or ["role fundamentals", "communication", "problem solving"]
            return {
                "summary": (
                    f"A {payload.target_level} prep plan for {payload.role_title} "
                    "covering skills, practice interviews, and review."
                ),
                "skill_gaps": gaps,
                "sections": [
                    {
                        "title": "Core concepts",
                        "items": [f"Study fundamentals for {payload.role_title}"],
                        "estimated_hours": 4,
                    },
                    {
                        "title": "Practice interviews",
                        "items": ["Complete 2 mock chat interviews", "Review feedback"],
                        "estimated_hours": 3,
                    },
                    {
                        "title": "Role scenarios",
                        "items": ["Practice STAR stories", "Prepare portfolio examples"],
                        "estimated_hours": 2,
                    },
                ],
                "suggested_tracks": [
                    f"{payload.target_level}-{payload.role_title.lower().replace(' ', '-')}"
                ],
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        sections = [
            PrepPlanSection(
                title=str(s.get("title", "Section")),
                items=list(s.get("items") or []),
                estimated_hours=s.get("estimated_hours"),
            )
            for s in (data.get("sections") or [])
            if isinstance(s, dict)
        ]
        return PrepPlanResponse(
            correlation_id=payload.correlation_id,
            candidate_id=payload.candidate_id,
            role_title=payload.role_title,
            plan_id=str(uuid4()),
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Generated prep plan via {provider}",
            summary=data.get("summary"),
            skill_gaps=list(data.get("skill_gaps") or []),
            sections=sections,
            suggested_tracks=list(data.get("suggested_tracks") or []),
        )
