from datetime import datetime
from decimal import Decimal
from typing import List, Optional

from pydantic import BaseModel


class RolOut(BaseModel):
    id_rol: int
    nombre: str

    model_config = {"from_attributes": True}


class UsuarioOut(BaseModel):
    id_usuario: int
    nombre: str
    apellidos: Optional[str]
    email: str
    fecha_creacion: datetime
    activo: bool
    rol: RolOut

    model_config = {"from_attributes": True}


class AlumnoOut(BaseModel):
    id_alumno: int
    nivel: Optional[str]
    usuario: UsuarioOut

    model_config = {"from_attributes": True}


class ProfesorOut(BaseModel):
    id_profesor: int
    especialidad: Optional[str]
    usuario: UsuarioOut

    model_config = {"from_attributes": True}


class CursoOut(BaseModel):
    id_curso: int
    nombre: str
    descripcion: Optional[str]
    fecha_creacion: datetime
    profesor: ProfesorOut

    model_config = {"from_attributes": True}


class MatriculaOut(BaseModel):
    id_matricula: int
    id_alumno: int
    id_curso: int
    fecha_matricula: datetime

    model_config = {"from_attributes": True}


class ActividadOut(BaseModel):
    id_actividad: int
    titulo: str
    descripcion: Optional[str]
    fecha_publicacion: datetime
    fecha_entrega: Optional[datetime]
    puntuacion_maxima: Optional[Decimal]
    id_curso: int

    model_config = {"from_attributes": True}


class CalificacionOut(BaseModel):
    id_calificacion: int
    nota: Optional[Decimal]
    observaciones: Optional[str]
    fecha_calificacion: datetime

    model_config = {"from_attributes": True}


class EntregaOut(BaseModel):
    id_entrega: int
    id_actividad: int
    id_alumno: int
    fecha_entrega: datetime
    estado: str
    calificacion: Optional[CalificacionOut]

    model_config = {"from_attributes": True}


class ProgresoOut(BaseModel):
    id_progreso: int
    id_alumno: int
    id_curso: int
    porcentaje: Optional[Decimal]

    model_config = {"from_attributes": True}


class PlatformSummary(BaseModel):
    total_users: int
    active_users: int
    total_students: int
    total_teachers: int
    total_courses: int
    total_enrollments: int
    total_activities: int
    total_submissions: int
