"""Schemas — Level-based interview tracks (Beginner → Advanced)."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.prompts import Persona
from app.schemas.common import StubMeta
from app.schemas.questions import Difficulty, GeneratedQuestion


class InterviewTrackRequest(BaseModel):
    """POST /api/v1/interview-tracks/generate"""

    correlation_id: UUID | None = None
    role_title: str
    niche: str | None = None
    job_description: str | None = None
    persona: Persona = Persona.FRIENDLY_COACH
    levels: list[str] = Field(
        default_factory=lambda: ["beginner", "intermediate", "advanced"],
    )
    questions_per_level: int = Field(default=5, ge=1, le=20)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class TrackLevel(BaseModel):
    level: str
    badge_name: str | None = None
    questions: list[GeneratedQuestion] = Field(default_factory=list)
    passing_score: float | None = 0.7


class InterviewTrackResponse(StubMeta):
    correlation_id: UUID | None = None
    track_id: str | None = None
    role_title: str
    levels: list[TrackLevel] = Field(default_factory=list)
