"""Schemas — AI-assisted reference checks (SOW)."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.schemas.common import StubMeta


class ReferenceQuestionnaireRequest(BaseModel):
    """POST /api/v1/reference-checks/questionnaire"""

    correlation_id: UUID | None = None
    candidate_id: str
    role_title: str
    job_description: str | None = None
    referee_relationship: str | None = Field(
        default=None,
        description="manager | peer | report | client",
    )
    count: int = Field(default=8, ge=3, le=20)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class ReferenceQuestion(BaseModel):
    id: str
    text: str
    category: str | None = None


class ReferenceQuestionnaireResponse(StubMeta):
    correlation_id: UUID | None = None
    candidate_id: str
    questionnaire_id: str | None = None
    questions: list[ReferenceQuestion] = Field(default_factory=list)


class ReferenceReportRequest(BaseModel):
    """POST /api/v1/reference-checks/report"""

    correlation_id: UUID | None = None
    candidate_id: str
    role_title: str
    referee_responses: list[dict[str, Any]] = Field(..., min_length=1)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class ReferenceReportResponse(StubMeta):
    correlation_id: UUID | None = None
    candidate_id: str
    report_id: str | None = None
    sentiment_summary: str | None = None
    strengths: list[str] = Field(default_factory=list)
    concerns: list[str] = Field(default_factory=list)
    recommendation: str | None = None
    report_markdown: str | None = None
