"""Schemas — Custom company persona + scorecard templates + DEI + session summary."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.schemas.common import StubMeta


class CustomPersonaRequest(BaseModel):
    """POST /api/v1/interviewer-personas/custom"""

    correlation_id: UUID | None = None
    company_id: str
    name: str
    interview_style: str | None = None
    company_values: list[str] = Field(default_factory=list)
    sample_questions: list[str] = Field(default_factory=list)
    evaluation_criteria: list[str] = Field(default_factory=list)
    tone_notes: str | None = None
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class CustomPersonaResponse(StubMeta):
    correlation_id: UUID | None = None
    company_id: str
    persona_id: str | None = None
    name: str
    system_prompt: str | None = None
    style_summary: str | None = None


class ScorecardGenerateRequest(BaseModel):
    """POST /api/v1/scorecards/generate"""

    correlation_id: UUID | None = None
    role_title: str
    job_description: str | None = None
    persona: str | None = None
    criteria_hints: list[str] = Field(default_factory=list)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class ScorecardCriterion(BaseModel):
    id: str
    name: str
    weight: float = 1.0
    description: str | None = None


class ScorecardGenerateResponse(StubMeta):
    correlation_id: UUID | None = None
    role_title: str
    scorecard_id: str | None = None
    criteria: list[ScorecardCriterion] = Field(default_factory=list)


class InterviewSummarizeRequest(BaseModel):
    """POST /api/v1/interviews/summarize"""

    correlation_id: UUID | None = None
    interview_id: str
    role_title: str
    transcript: list[dict[str, Any]] = Field(default_factory=list)
    scorecard: dict[str, Any] = Field(default_factory=dict)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class InterviewSummarizeResponse(StubMeta):
    correlation_id: UUID | None = None
    interview_id: str
    summary_markdown: str | None = None
    key_takeaways: list[str] = Field(default_factory=list)
    recommendation: str | None = None


class DeiAnalyticsRequest(BaseModel):
    """POST /api/v1/dei-analytics/analyze"""

    correlation_id: UUID | None = None
    dataset: list[dict[str, Any]] = Field(
        default_factory=list,
        description="Anonymized evaluation rows for DEI insight generation",
    )
    role_title: str | None = None
    options: dict[str, Any] = Field(default_factory=dict)


class DeiAnalyticsResponse(StubMeta):
    correlation_id: UUID | None = None
    fairness_score: float | None = None
    insights: list[str] = Field(default_factory=list)
    risks: list[str] = Field(default_factory=list)
    recommendations: list[str] = Field(default_factory=list)
