"""Pydantic schemas for Station and StationRecipeAssignment."""
from datetime import datetime
from typing import Optional

from pydantic import BaseModel, ConfigDict, Field


class StationCreate(BaseModel):
    code: str = Field(..., min_length=1, max_length=100)
    name: str = Field(..., min_length=1, max_length=255)
    location: Optional[str] = Field(default=None, max_length=255)
    notes: Optional[str] = None
    active: bool = True


class StationUpdate(BaseModel):
    name: Optional[str] = Field(default=None, min_length=1, max_length=255)
    location: Optional[str] = Field(default=None, max_length=255)
    notes: Optional[str] = None
    active: Optional[bool] = None


class StationResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    code: str
    name: str
    location: Optional[str]
    notes: Optional[str]
    active: bool
    created_by: int
    created_at: datetime


class StationRecipeAssignmentCreate(BaseModel):
    recipe_id: int = Field(..., gt=0)


class StationRecipeAssignmentResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    station_id: int
    recipe_id: int
    assigned_by: int
    assigned_at: datetime


class RecipeSummary(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    code: str
    name: str
    active: bool
    image_path: Optional[str] = None
    description: Optional[str] = None


class StationWithRecipesResponse(StationResponse):
    recipes: list[RecipeSummary] = Field(default_factory=list)
