"""Behavioral analysis."""

from app.schemas.behavioral_analysis import (BehavioralAnalysisRequest,BehavioralAnalysisResponse,BehavioralCue,)
from app.schemas.common import JobStatus
from app.services.ai_generate import generate_json


class BehavioralAnalysisService:
    async def analyze(self, payload: BehavioralAnalysisRequest) -> BehavioralAnalysisResponse:
        system = (
            "Analyze interview behavior. Return JSON: "
            "{\"overall_confidence\":0-1,\"tone_summary\",\"cues\":[{\"name\",\"score\",\"evidence\"}],\"flags\":[]}"
        )
        user = (
            f"Mode: {payload.mode.value}\nTranscript: {payload.transcript}\n"
            f"Audio features: {payload.audio_features}\nVideo signals: {payload.video_signals}"
        )

        def local() -> dict:
            text_len = sum(len(t.text) for t in payload.transcript)
            confidence = 0.6 if text_len < 80 else 0.75
            return {
                "overall_confidence": confidence,
                "tone_summary": "Generally composed; some hesitation on deeper probes.",
                "cues": [
                    {
                        "name": "confidence",
                        "score": confidence,
                        "evidence": "Steady phrasing across answers",
                    },
                    {
                        "name": "hesitation",
                        "score": 0.35,
                        "evidence": "Short pauses before technical specifics",
                    },
                ],
                "flags": [],
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        cues = [
            BehavioralCue(
                name=str(c.get("name", "")),
                score=c.get("score"),
                evidence=c.get("evidence"),
            )
            for c in (data.get("cues") or [])
            if isinstance(c, dict)
        ]
        return BehavioralAnalysisResponse(
            correlation_id=payload.correlation_id,
            interview_id=payload.interview_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Behavioral analysis via {provider}",
            overall_confidence=data.get("overall_confidence"),
            tone_summary=data.get("tone_summary"),
            cues=cues,
            flags=list(data.get("flags") or []),
        )
