"""Interview AI highlights service."""

from app.schemas.common import JobStatus
from app.schemas.interview_highlights import (
    HighlightItem,
    InterviewHighlightsRequest,
    InterviewHighlightsResponse,
)
from app.services.ai_generate import generate_json


class InterviewHighlightsService:
    async def generate(
        self, payload: InterviewHighlightsRequest
    ) -> InterviewHighlightsResponse:
        system = (
            "Extract interview highlights. Return JSON: "
            "{\"strengths\":[{\"kind\",\"text\",\"timestamp_ms\",\"turn_id\"}],"
            "\"weaknesses\":[...],\"flagged_responses\":[...],\"summary_markdown\"}"
        )
        user = (
            f"Interview: {payload.interview_id}\nRole: {payload.role_title}\n"
            f"Scorecard: {payload.scorecard}\nTranscript: {payload.transcript}"
        )

        def local() -> dict:
            candidate_turns = [t for t in payload.transcript if t.role == "candidate"]
            strengths = []
            weaknesses = []
            if candidate_turns:
                strengths.append(
                    {
                        "kind": "strength",
                        "text": candidate_turns[0].text[:180],
                        "timestamp_ms": candidate_turns[0].timestamp_ms,
                        "turn_id": candidate_turns[0].turn_id,
                    }
                )
                if len(candidate_turns) > 1:
                    weaknesses.append(
                        {
                            "kind": "weakness",
                            "text": "Could add more measurable outcomes to later answers.",
                            "timestamp_ms": candidate_turns[-1].timestamp_ms,
                            "turn_id": candidate_turns[-1].turn_id,
                        }
                    )
            else:
                strengths.append(
                    {
                        "kind": "strength",
                        "text": "No transcript turns provided — baseline placeholder highlight.",
                        "timestamp_ms": None,
                        "turn_id": None,
                    }
                )
            return {
                "strengths": strengths,
                "weaknesses": weaknesses,
                "flagged_responses": [],
                "summary_markdown": (
                    f"## Highlights — {payload.role_title}\n"
                    "Key moments extracted for recruiter replay navigation."
                ),
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )

        def parse(items: list) -> list[HighlightItem]:
            out = []
            for i in items or []:
                if not isinstance(i, dict):
                    continue
                out.append(
                    HighlightItem(
                        kind=str(i.get("kind", "strength")),
                        text=str(i.get("text", "")),
                        timestamp_ms=i.get("timestamp_ms"),
                        turn_id=i.get("turn_id"),
                    )
                )
            return out

        return InterviewHighlightsResponse(
            correlation_id=payload.correlation_id,
            interview_id=payload.interview_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Interview highlights via {provider}",
            strengths=parse(data.get("strengths") or []),
            weaknesses=parse(data.get("weaknesses") or []),
            flagged_responses=parse(data.get("flagged_responses") or []),
            summary_markdown=data.get("summary_markdown"),
        )
