"""Dedicated confidence scoring."""

from app.schemas.common import JobStatus
from app.schemas.confidence_scoring import (
    ConfidenceScoringRequest,
    ConfidenceScoringResponse,
)
from app.services.ai_generate import generate_json


class ConfidenceScoringService:
    async def evaluate(
        self, payload: ConfidenceScoringRequest
    ) -> ConfidenceScoringResponse:
        system = (
            "Score interview confidence. Return JSON: "
            "{\"confidence_score\":0-1,\"certainty_band\",\"cues\":[],\"summary\"}"
        )
        user = (
            f"Interview: {payload.interview_id}\nMode: {payload.mode.value}\n"
            f"Transcript: {payload.transcript}\nAudio: {payload.audio_features}"
        )

        def local() -> dict:
            turns = len(payload.transcript)
            score = 0.55 if turns < 2 else 0.72 if turns < 6 else 0.84
            band = "low" if score < 0.6 else "medium" if score < 0.8 else "high"
            return {
                "confidence_score": score,
                "certainty_band": band,
                "cues": ["steady phrasing", "limited hedging"] if score >= 0.7 else ["short answers"],
                "summary": f"Estimated confidence band `{band}` for interview {payload.interview_id}.",
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        return ConfidenceScoringResponse(
            correlation_id=payload.correlation_id,
            interview_id=payload.interview_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Confidence scoring via {provider}",
            confidence_score=data.get("confidence_score"),
            certainty_band=data.get("certainty_band"),
            cues=list(data.get("cues") or []),
            summary=data.get("summary"),
        )
