""" Schemas Pydantic para Conductor. """ from datetime import date from typing import Optional from pydantic import EmailStr, Field from app.schemas.base import BaseSchema, TimestampSchema class ConductorBase(BaseSchema): """Schema base de conductor.""" nombre: str = Field(..., min_length=2, max_length=100) apellido: str = Field(..., min_length=2, max_length=100) telefono: Optional[str] = Field(None, max_length=20) email: Optional[EmailStr] = None documento_tipo: Optional[str] = Field(None, max_length=20) documento_numero: Optional[str] = Field(None, max_length=50) licencia_numero: Optional[str] = Field(None, max_length=50) licencia_tipo: Optional[str] = Field(None, max_length=20) licencia_vencimiento: Optional[date] = None fecha_nacimiento: Optional[date] = None direccion: Optional[str] = None contacto_emergencia: Optional[str] = Field(None, max_length=100) telefono_emergencia: Optional[str] = Field(None, max_length=20) fecha_contratacion: Optional[date] = None numero_empleado: Optional[str] = Field(None, max_length=50) class ConductorCreate(ConductorBase): """Schema para crear conductor.""" pass class ConductorUpdate(BaseSchema): """Schema para actualizar conductor.""" nombre: Optional[str] = Field(None, min_length=2, max_length=100) apellido: Optional[str] = Field(None, min_length=2, max_length=100) telefono: Optional[str] = Field(None, max_length=20) email: Optional[EmailStr] = None documento_tipo: Optional[str] = Field(None, max_length=20) documento_numero: Optional[str] = Field(None, max_length=50) licencia_numero: Optional[str] = Field(None, max_length=50) licencia_tipo: Optional[str] = Field(None, max_length=20) licencia_vencimiento: Optional[date] = None foto_url: Optional[str] = None fecha_nacimiento: Optional[date] = None direccion: Optional[str] = None contacto_emergencia: Optional[str] = Field(None, max_length=100) telefono_emergencia: Optional[str] = Field(None, max_length=20) fecha_contratacion: Optional[date] = None numero_empleado: Optional[str] = Field(None, max_length=50) activo: Optional[bool] = None notas: Optional[str] = None class ConductorResponse(ConductorBase, TimestampSchema): """Schema de respuesta de conductor.""" id: int foto_url: Optional[str] = None activo: bool notas: Optional[str] = None nombre_completo: str licencia_vigente: bool class ConductorResumen(BaseSchema): """Schema resumido de conductor.""" id: int nombre_completo: str telefono: Optional[str] = None licencia_vigente: bool activo: bool class ConductorEstadisticas(BaseSchema): """Estadísticas de un conductor.""" conductor_id: int nombre_completo: str total_viajes: int distancia_total_km: float tiempo_conduccion_horas: float velocidad_promedio: float alertas_total: int alertas_velocidad: int calificacion: Optional[float] = None # Score calculado