from pydantic import BaseModel, Field from datetime import datetime, date from typing import Optional # === Services === class ServiceOut(BaseModel): id: int name: str slug: str duration_min: int description: Optional[str] = None category: str price_cents: Optional[int] = None availability_text: Optional[str] = None class Config: from_attributes = True class ServiceCreate(BaseModel): name: str slug: str duration_min: int = 15 description: Optional[str] = None category: str = "generale" price_cents: Optional[int] = None availability_text: Optional[str] = None # === Providers === class ProviderOut(BaseModel): id: int name: str class Config: from_attributes = True class ProviderCreate(BaseModel): name: str email: Optional[str] = None phone: Optional[str] = None google_calendar_id: Optional[str] = None # === Availability === class TimeSlot(BaseModel): start: str # "09:00" end: str # "09:30" provider_id: int provider_name: str class AvailabilityRule(BaseModel): weekday: int # 0=lun, 6=dom start: str # "09:00" end: str # "13:00" # === Bookings === class BookingCreate(BaseModel): service_id: int provider_id: int start_at: datetime customer_name: str customer_phone: str customer_email: Optional[str] = None notes: Optional[str] = None class BookingOut(BaseModel): id: int service_id: int provider_id: int customer_name: str customer_phone: str customer_email: Optional[str] = None start_at: datetime end_at: datetime status: str notes: Optional[str] = None created_at: datetime receipt_number: Optional[str] = None receipt_token: Optional[str] = None service: Optional[ServiceOut] = None provider: Optional[ProviderOut] = None class Config: from_attributes = True class BookingUpdate(BaseModel): status: Optional[str] = None notes: Optional[str] = None