package dev.lions.unionflow.server.api.dto.cotisation.request;

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;

import lombok.Builder;

/**
 * Requête de mise à jour d'une cotisation existante.
 *
 * @param libelle      Nouveau libellé.
 * @param description  Nouvelle description.
 * @param montantDu    Nouveau montant dû (si non payé).
 * @param dateEcheance Nouvelle date d'échéance.
 * @param observations Nouvelles observations.
 * @param statut       Nouveau statut (validation métier requise).
 * @param annee        Année de référence.
 * @param mois         Mois de référence.
 * @param recurrente   État de récurrence.
 * @author UnionFlow Team
 * @version 1.0
 * @since 2026-02-22
 */
@Builder
public record UpdateCotisationRequest(
                @Size(max = 100) String libelle,

                @Size(max = 500) String description,

                @DecimalMin(value = "0.0", inclusive = false) @Digits(integer = 10, fraction = 2) BigDecimal montantDu,

                LocalDate dateEcheance,

                @Size(max = 1000) String observations,

                String statut,

                @Min(2020) @Max(2100) Integer annee,

                @Min(1) @Max(12) Integer mois,

                Boolean recurrente) {
}
