"""Pydantic-схемы API M1."""

from datetime import datetime

from pydantic import BaseModel, ConfigDict, Field

# --- Task ---


class TagOut(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    name: str


class ProjectOut(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    name: str
    relevance_status: str
    priority: int | None
    note: str


class TaskCreate(BaseModel):
    title: str = Field(min_length=1, max_length=500)
    description: str = ""


class TaskUpdate(BaseModel):
    """Частичное обновление метаданных задачи (ручная детализация)."""

    title: str | None = Field(None, max_length=500)
    description: str | None = None
    project_id: int | None = None
    tag_ids: list[int] | None = None
    priority: int | None = None
    status: str | None = None


class TaskOut(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    title: str
    description: str
    task_type: str
    status: str
    detail_state: str
    parent_task_id: int | None
    project: ProjectOut | None
    priority: int | None
    tags: list[TagOut]
    created_at: datetime
    approved_at: datetime | None
    done_at: datetime | None


# --- Project / Tag ---


class ProjectCreate(BaseModel):
    name: str = Field(min_length=1, max_length=200)
    priority: int | None = None
    note: str = ""


class ProjectUpdate(BaseModel):
    name: str | None = Field(None, max_length=200)
    relevance_status: str | None = None
    priority: int | None = None
    note: str | None = None


class TagCreate(BaseModel):
    name: str = Field(min_length=1, max_length=100)
