"""Schemas — AI job matching / recommendations."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.schemas.common import StubMeta


class JobMatchingRequest(BaseModel):
    """POST /api/v1/job-matching/recommend"""

    correlation_id: UUID | None = None
    candidate_id: str
    resume_text: str | None = None
    resume_structured: dict[str, Any] = Field(default_factory=dict)
    skills: list[str] = Field(default_factory=list)
    experience_years: float | None = None
    interests: list[str] = Field(default_factory=list)
    career_goals: list[str] = Field(default_factory=list)
    preparation_history: dict[str, Any] = Field(default_factory=dict)
    job_catalog: list[dict[str, Any]] = Field(
        default_factory=list,
        description="Candidate job pool from Platform (id, title, jd, skills, ...)",
    )
    limit: int = Field(default=10, ge=1, le=50)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class JobMatchItem(BaseModel):
    job_id: str
    title: str | None = None
    match_score: float | None = None
    reasons: list[str] = Field(default_factory=list)
    skill_overlap: list[str] = Field(default_factory=list)
    gaps: list[str] = Field(default_factory=list)


class JobMatchingResponse(StubMeta):
    correlation_id: UUID | None = None
    candidate_id: str
    recommendations: list[JobMatchItem] = Field(default_factory=list)
