"""Reports — panelist notes + evaluation PDF payload."""

from uuid import uuid4

from app.schemas.common import JobStatus
from app.schemas.reports import (
    EvaluationReportRequest,
    EvaluationReportResponse,
    PanelistNotesRequest,
    PanelistNotesResponse,
)
from app.services.ai_generate import generate_json


class ReportsService:
    async def panelist_notes(self, payload: PanelistNotesRequest) -> PanelistNotesResponse:
        system = (
            "Write structured panelist notes. Return JSON: "
            "{\"notes_markdown\",\"highlights\":[],\"risks\":[],\"recommendation\"}"
        )
        user = (
            f"Role: {payload.role_title}\nCandidate: {payload.candidate_id}\n"
            f"Scorecard: {payload.scorecard}\nExcerpt: {payload.transcript_excerpt}\n"
            f"Annotations: {payload.recruiter_annotations}"
        )

        def local() -> dict:
            return {
                "notes_markdown": (
                    f"## Panelist notes — {payload.role_title}\n\n"
                    f"- Candidate `{payload.candidate_id}` demonstrated solid baselines.\n"
                    "- Recommend a focused follow-up on impact metrics."
                ),
                "highlights": ["Clear communication", "Relevant experience signals"],
                "risks": ["Limited quantified outcomes"],
                "recommendation": "advance_with_follow_up",
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        return PanelistNotesResponse(
            correlation_id=payload.correlation_id,
            interview_id=payload.interview_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Panelist notes via {provider}",
            notes_markdown=data.get("notes_markdown"),
            highlights=list(data.get("highlights") or []),
            risks=list(data.get("risks") or []),
            recommendation=data.get("recommendation"),
        )

    async def evaluation_pdf(
        self, payload: EvaluationReportRequest
    ) -> EvaluationReportResponse:
        system = (
            "Create an evaluation report summary. Return JSON: "
            "{\"summary_markdown\",\"download_url\":null}"
        )
        user = (
            f"Role: {payload.role_title}\nCandidate: {payload.candidate_name or payload.candidate_id}\n"
            f"Company: {payload.company_name}\nScoring: {payload.scoring_payload}\n"
            f"Notes: {payload.panelist_notes}"
        )

        def local() -> dict:
            name = payload.candidate_name or payload.candidate_id
            return {
                "summary_markdown": (
                    f"# Evaluation Report\n\n"
                    f"**Candidate:** {name}\n**Role:** {payload.role_title}\n\n"
                    "Overall: candidate is a possible fit pending deeper technical validation."
                ),
                "download_url": None,
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        report_id = str(uuid4())
        return EvaluationReportResponse(
            correlation_id=payload.correlation_id,
            interview_id=payload.interview_id,
            report_id=report_id,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Evaluation report via {provider}",
            pdf_base64=None,
            download_url=data.get("download_url"),
            summary_markdown=data.get("summary_markdown"),
        )
