from datetime import datetime

from pydantic import BaseModel


# ── Requests ──────────────────────────────────────────────────────────────────

class CalendrierCreate(BaseModel):
    titre: str
    description: str
    type: str
    dateDebut: datetime
    dateFin: datetime
    lieu: str
    estEnLigne: bool = False
    lienEnLigne: str | None = None
    nbMaxParticipants: int | None = None
    imageUrl: str | None = None
    tags: list[str] = []
    publicCible: list[str] = []


class CalendrierUpdate(BaseModel):
    titre: str | None = None
    description: str | None = None
    type: str | None = None
    statut: str | None = None
    dateDebut: datetime | None = None
    dateFin: datetime | None = None
    lieu: str | None = None
    estEnLigne: bool | None = None
    lienEnLigne: str | None = None
    nbMaxParticipants: int | None = None
    imageUrl: str | None = None
    tags: list[str] | None = None
    publicCible: list[str] | None = None


# ── Responses ─────────────────────────────────────────────────────────────────

class CalendrierResponse(BaseModel):
    id: str
    titre: str
    description: str
    type: str
    statut: str
    dateDebut: datetime
    dateFin: datetime
    lieu: str
    estEnLigne: bool
    lienEnLigne: str | None = None
    nbMaxParticipants: int | None = None
    nbParticipantsActuels: int
    imageUrl: str | None = None
    tags: list[str] = []
    publicCible: list[str] = []
    organisateurId: str | None = None
    estInscrit: bool = False
    dateCreation: datetime
    dateModification: datetime | None = None
