"""Pydantic schemas for the inventory domain (supplies + stations).

Quantity fields on supplies stay free-form STRINGS — the v1 wart carried on
purpose (models/garden.py). ``needed`` is the shopping-list flag.
"""
from __future__ import annotations

from datetime import datetime

from pydantic import BaseModel


class SupplyOut(BaseModel):
    id: int
    name: str
    category: str = ""
    amount: str = ""
    quantity_on_hand: str = ""
    quantity_needed: str = ""
    needed: bool = False
    notes: str = ""
    featured_image_path: str = ""
    is_archived: bool = False
    created_at: datetime | None = None


class SupplyCreate(BaseModel):
    name: str
    category: str = ""
    quantity_on_hand: str = ""
    quantity_needed: str = ""
    needed: bool = False
    notes: str = ""


class SupplyPatch(BaseModel):
    name: str | None = None
    category: str | None = None
    quantity_on_hand: str | None = None
    quantity_needed: str | None = None
    needed: bool | None = None
    notes: str | None = None


class AreaRef(BaseModel):
    id: int
    name: str


class StationOut(BaseModel):
    id: int
    name: str
    notes: str = ""
    current_schedule: str = ""
    featured_image_path: str = ""
    is_archived: bool = False
    created_at: datetime | None = None
    area_count: int | None = None


class StationDetail(StationOut):
    areas: list[AreaRef]


class StationCreate(BaseModel):
    name: str
    notes: str = ""
    current_schedule: str = ""
    area_ids: list[int] = []


class StationPatch(BaseModel):
    name: str | None = None
    notes: str | None = None
    current_schedule: str | None = None


class StationAreasSet(BaseModel):
    """PUT /api/stations/{id}/areas body — full replace of the M2M set."""

    area_ids: list[int]


class StationAreasResult(BaseModel):
    ok: bool = True
    area_ids: list[int]


class OkResult(BaseModel):
    ok: bool = True
