"""Schemas — AI job description drafting."""

from enum import Enum
from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.prompts import Persona
from app.schemas.common import StubMeta


class EmploymentType(str, Enum):
    FULL_TIME = "full_time"
    PART_TIME = "part_time"
    CONTRACT = "contract"
    INTERNSHIP = "internship"
    TEMPORARY = "temporary"


class JobDescriptionDraftRequest(BaseModel):
    """POST /api/v1/job-descriptions/draft"""

    correlation_id: UUID | None = None
    role_title: str = Field(..., min_length=1, examples=["Product Manager"])
    persona: Persona = Persona.HR_BEHAVIORAL
    seniority: str | None = None
    department: str | None = None
    employment_type: EmploymentType = EmploymentType.FULL_TIME
    location: str | None = Field(default=None, examples=["Remote - India"])
    must_have_skills: list[str] = Field(default_factory=list)
    nice_to_have_skills: list[str] = Field(default_factory=list)
    responsibilities: list[str] = Field(
        default_factory=list,
        description="Optional seed bullets the draft should cover",
    )
    company_context: str | None = Field(
        default=None,
        description="Company / team context for tone and scope",
    )
    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 JobDescriptionSections(BaseModel):
    summary: str | None = None
    responsibilities: list[str] = Field(default_factory=list)
    requirements: list[str] = Field(default_factory=list)
    nice_to_have: list[str] = Field(default_factory=list)
    benefits: list[str] = Field(default_factory=list)


class JobDescriptionDraftResponse(StubMeta):
    correlation_id: UUID | None = None
    role_title: str
    persona: Persona
    prompt_preview: dict[str, str] = Field(default_factory=dict)
    title: str | None = None
    markdown: str | None = None
    sections: JobDescriptionSections = Field(default_factory=JobDescriptionSections)
