"""AI-generated candidate profile pages / summaries."""

from app.schemas.candidate_profiles import (
    CandidateProfileSummarizeRequest,
    CandidateProfileSummarizeResponse,
)
from app.schemas.common import JobStatus
from app.services.ai_generate import generate_json


class CandidateProfilesService:
    async def summarize(
        self, payload: CandidateProfileSummarizeRequest
    ) -> CandidateProfileSummarizeResponse:
        system = (
            "Build an AI candidate profile summary. Return JSON: "
            "{\"headline\",\"summary_markdown\",\"strengths\":[],\"growth_areas\":[],"
            "\"readiness_score\",\"badge_highlights\":[],\"recommended_next_steps\":[]}"
        )
        user = (
            f"Candidate: {payload.candidate_id}\nTarget role: {payload.target_role}\n"
            f"Resume: {(payload.resume_text or '')[:3000]}\n"
            f"Interviews: {payload.interview_history[-10:]}\n"
            f"Assessments: {payload.assessment_records[-10:]}\n"
            f"Badges: {payload.badges}\nReports: {payload.reports[-5:]}"
        )

        def local() -> dict:
            badge_highlights = list(payload.badges)[:5]
            strengths = ["Clear communication", "Consistent mock performance"]
            if payload.assessment_records:
                strengths.append("Assessment participation")
            growth = ["Deepen role-specific examples"]
            readiness = 0.55 + min(0.35, 0.05 * len(payload.interview_history))
            role = payload.target_role or "target roles"
            return {
                "headline": f"Interview-ready profile for {role}",
                "summary_markdown": (
                    f"# Candidate {payload.candidate_id}\n\n"
                    f"Profile assembled from resume, {len(payload.interview_history)} interviews, "
                    f"{len(payload.assessment_records)} assessments, and {len(payload.badges)} badges.\n"
                ),
                "strengths": strengths,
                "growth_areas": growth,
                "readiness_score": round(min(0.95, readiness), 2),
                "badge_highlights": badge_highlights,
                "recommended_next_steps": [
                    "Complete one advanced interview track",
                    "Add quantified impact stories to resume",
                ],
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        return CandidateProfileSummarizeResponse(
            correlation_id=payload.correlation_id,
            candidate_id=payload.candidate_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Candidate profile via {provider}",
            headline=data.get("headline"),
            summary_markdown=data.get("summary_markdown"),
            strengths=list(data.get("strengths") or []),
            growth_areas=list(data.get("growth_areas") or []),
            readiness_score=data.get("readiness_score"),
            badge_highlights=list(data.get("badge_highlights") or []),
            recommended_next_steps=list(data.get("recommended_next_steps") or []),
        )
