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

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.Builder;

/**
 * Requête de mise à jour d'une adhésion.
 *
 * @author UnionFlow Team
 * @version 1.0
 */
@Builder
public record UpdateAdhesionRequest(
        @DecimalMin(value = "0.0", message = "Le montant payé ne peut pas être négatif") @Digits(integer = 10, fraction = 2, message = "Format de montant invalide") BigDecimal montantPaye,

        @Pattern(regexp = "^(EN_ATTENTE|APPROUVEE|REJETEE|ANNULEE|EN_PAIEMENT|PAYEE)$", message = "Statut invalide") String statut,

        LocalDate dateApprobation,
        LocalDateTime datePaiement,

        @Pattern(regexp = "^(ESPECES|VIREMENT|CHEQUE|WAVE_MONEY|ORANGE_MONEY|FREE_MONEY|CARTE_BANCAIRE)$", message = "Méthode de paiement invalide") String methodePaiement,

        @Size(max = 100, message = "La référence de paiement ne peut pas dépasser 100 caractères") String referencePaiement,

        @Size(max = 1000, message = "Le motif de rejet ne peut pas dépasser 1000 caractères") String motifRejet,

        @Size(max = 1000, message = "Les observations ne peuvent pas dépasser 1000 caractères") String observations,

        @Size(max = 255, message = "Le nom de l'approbateur ne peut pas dépasser 255 caractères") String approuvePar,

        LocalDate dateValidation) {
}
