"""Modèles de données pour la comparaison d'agenda (diff).""" from __future__ import annotations from datetime import date from enum import StrEnum from pydantic import BaseModel, ConfigDict, Field from pronote_sync.models.agenda import Lesson, TheoreticalLesson class AgendaChangeType(StrEnum): """Type de changement dans l'agenda.""" ADDED = "added" REMOVED = "removed" MODIFIED = "modified" class AgendaChange(BaseModel): """Représente un changement entre l'agenda réel et l'agenda théorique.""" model_config = ConfigDict(frozen=True) type: AgendaChangeType = Field(..., description="Type de changement") lesson: Lesson | None = Field(None, description="Cours concerné (pour ADDED/MODIFIED)") theoretical_lesson: TheoreticalLesson | None = Field( None, description="Cours théorique concerné (pour REMOVED/MODIFIED)" ) details: str = Field(default="", description="Détails du changement") class AgendaDiff(BaseModel): """Représente les différences entre l'agenda réel et l'agenda théorique.""" model_config = ConfigDict(frozen=True) target_date: date = Field(..., description="Date cible de la comparaison") changes: list[AgendaChange] = Field(default_factory=list, description="Liste des changements")