""" Schemas Pydantic para Configuración. """ from typing import Any, Dict, List, Optional from pydantic import Field from app.schemas.base import BaseSchema, TimestampSchema class ConfiguracionBase(BaseSchema): """Schema base de configuración.""" clave: str = Field(..., min_length=2, max_length=100) categoria: str = Field(default="general", max_length=50) descripcion: Optional[str] = None class ConfiguracionCreate(ConfiguracionBase): """Schema para crear configuración.""" valor: Any # Se convertirá a JSON tipo_dato: str = Field(default="string", pattern="^(string|number|boolean|json|array)$") sensible: bool = False editable: bool = True class ConfiguracionUpdate(BaseSchema): """Schema para actualizar configuración.""" valor: Any descripcion: Optional[str] = None class ConfiguracionResponse(ConfiguracionBase, TimestampSchema): """Schema de respuesta de configuración.""" valor_json: str tipo_dato: str sensible: bool editable: bool # Valor parseado valor: Optional[Any] = None class ConfiguracionResumen(BaseSchema): """Schema resumido de configuración.""" clave: str categoria: str valor: Any tipo_dato: str editable: bool class ConfiguracionesPorCategoria(BaseSchema): """Schema con configuraciones agrupadas por categoría.""" categoria: str configuraciones: List[ConfiguracionResumen] class ConfiguracionesResponse(BaseSchema): """Schema de respuesta con todas las configuraciones.""" categorias: List[str] configuraciones: Dict[str, List[ConfiguracionResumen]] class ActualizarConfiguracionesRequest(BaseSchema): """Schema para actualizar múltiples configuraciones.""" configuraciones: Dict[str, Any] # {clave: valor} class ConfiguracionesAlertasResponse(BaseSchema): """Schema específico para configuraciones de alertas.""" velocidad_maxima: int parada_minutos: int bateria_minima: int sin_señal_minutos: int motor_encendido_minutos: int class ConfiguracionesViajesResponse(BaseSchema): """Schema específico para configuraciones de viajes.""" velocidad_minima: float parada_minutos: int class ConfiguracionesNotificacionesResponse(BaseSchema): """Schema específico para configuraciones de notificaciones.""" email_habilitado: bool push_habilitado: bool destinatarios: List[str] class ConfiguracionesMapaResponse(BaseSchema): """Schema específico para configuraciones de mapa.""" centro_lat: float centro_lng: float zoom_default: int