"""Progress / improvement analytics service."""

from app.schemas.common import JobStatus
from app.schemas.progress_analytics import (
    ProgressAnalyticsRequest,
    ProgressAnalyticsResponse,
)
from app.services.ai_generate import generate_json


class ProgressAnalyticsService:
    async def analyze(
        self, payload: ProgressAnalyticsRequest
    ) -> ProgressAnalyticsResponse:
        system = (
            "Analyze candidate improvement over mocks/assessments. Return JSON: "
            "{\"readiness_score\":0-1,\"trend\",\"skill_trends\":{},\"strengths\":[],"
            "\"focus_areas\":[],\"summary_markdown\"}"
        )
        user = (
            f"Candidate: {payload.candidate_id}\nRole: {payload.role_title}\n"
            f"Mocks: {payload.mock_history}\nAssessments: {payload.assessment_history}\n"
            f"Prep: {payload.prep_history}"
        )

        def local() -> dict:
            scores = [
                float(m["score"])
                for m in payload.mock_history
                if isinstance(m, dict) and isinstance(m.get("score"), (int, float))
            ]
            readiness = (sum(scores) / len(scores)) if scores else 0.5
            trend = "flat"
            if len(scores) >= 2:
                trend = "improving" if scores[-1] >= scores[0] else "declining"
            return {
                "readiness_score": round(readiness, 2),
                "trend": trend,
                "skill_trends": {"overall": scores[-5:] if scores else []},
                "strengths": ["Consistency in recent practice"] if scores else [],
                "focus_areas": ["Deeper technical storytelling"],
                "summary_markdown": (
                    f"Candidate `{payload.candidate_id}` readiness "
                    f"~{round(readiness * 100)}% with trend `{trend}`."
                ),
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        return ProgressAnalyticsResponse(
            correlation_id=payload.correlation_id,
            candidate_id=payload.candidate_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Progress analytics via {provider}",
            readiness_score=data.get("readiness_score"),
            trend=data.get("trend"),
            skill_trends=data.get("skill_trends") or {},
            strengths=list(data.get("strengths") or []),
            focus_areas=list(data.get("focus_areas") or []),
            summary_markdown=data.get("summary_markdown"),
        )
