"""Pydantic schemas per la configurazione applicativa. Settings contiene la configurazione persistita in CONFIG_PATH/settings.json. """ from __future__ import annotations from typing import Optional from pydantic import BaseModel, Field from backend.constants import NICCHIE_DEFAULT class Settings(BaseModel): """Configurazione applicativa persistita su disco. Salvata in CONFIG_PATH/settings.json. """ api_key: Optional[str] = Field( default=None, description="Chiave API Anthropic. Se None, la generazione è disabilitata.", ) llm_model: str = Field( default="claude-sonnet-4-5", description="Modello Claude da usare per la generazione.", ) nicchie_attive: list[str] = Field( default_factory=lambda: list(NICCHIE_DEFAULT), description="Lista delle nicchie target attive per il calendario.", ) lingua: str = Field( default="italiano", description="Lingua dei contenuti generati.", ) frequenza_post: int = Field( default=3, ge=1, le=7, description="Numero di post a settimana (default: 3 — lun, mer, ven).", ) brand_name: Optional[str] = Field( default=None, description="Nome del brand/studio — usato nella CTA e nel brand voice.", ) tono: Optional[str] = Field( default="diretto e concreto", description="Tono di voce per i contenuti generati.", ) unsplash_api_key: Optional[str] = Field( default=None, description="Chiave API Unsplash. Se configurata, le keyword immagine vengono risolte in URL reali nel CSV.", )