"""Schemas — Employer talent scouting / leaderboard ranking (SOW §07)."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.schemas.common import StubMeta


class ScoutCandidate(BaseModel):
    candidate_id: str
    skills: list[str] = Field(default_factory=list)
    niche: str | None = None
    interview_pass_rate: float | None = None
    task_score: float | None = None
    badge_count: int = 0
    assessment_scores: dict[str, float] = Field(default_factory=dict)
    metadata: dict[str, Any] = Field(default_factory=dict)


class TalentScoutRankRequest(BaseModel):
    """POST /api/v1/talent-scouting/rank"""

    correlation_id: UUID | None = None
    role_title: str
    job_description: str | None = None
    required_skills: list[str] = Field(default_factory=list)
    niche: str | None = None
    candidates: list[ScoutCandidate] = Field(..., min_length=1)
    top_k: int = Field(default=20, ge=1, le=100)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class RankedCandidate(BaseModel):
    candidate_id: str
    rank: int
    scout_score: float
    rationale: str | None = None
    matched_skills: list[str] = Field(default_factory=list)


class TalentScoutRankResponse(StubMeta):
    correlation_id: UUID | None = None
    role_title: str
    ranked: list[RankedCandidate] = Field(default_factory=list)
