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

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import java.util.UUID;
import lombok.Builder;

/**
 * Requête pour déclarer un paiement manuel (espèces, virement, chèque).
 * Le paiement est créé avec le statut EN_ATTENTE_VALIDATION.
 * Le trésorier devra le valider via une page admin.
 *
 * @param cotisationId ID de la cotisation payée
 * @param methodePaiement Méthode de paiement (ESPECES, VIREMENT, CHEQUE, AUTRE)
 * @param reference Référence du paiement (numéro de transaction, numéro de chèque, etc.)
 * @param commentaire Commentaire optionnel
 * @param origineFonds Origine des fonds (LCB-FT) — obligatoire au-dessus du seuil configuré
 * @param justificationLcbFt Justification complémentaire LCB-FT si nécessaire
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2026-03-02
 */
@Builder
public record DeclarerPaiementManuelRequest(
    @NotNull(message = "L'ID de la cotisation est obligatoire")
    UUID cotisationId,

    @NotBlank(message = "La méthode de paiement est obligatoire")
    @Pattern(regexp = "^(ESPECES|VIREMENT|CHEQUE|AUTRE)$",
        message = "Méthode de paiement invalide. Valeurs autorisées : ESPECES, VIREMENT, CHEQUE, AUTRE")
    String methodePaiement,

    @Size(max = 100, message = "La référence ne doit pas dépasser 100 caractères")
    String reference,

    @Size(max = 500, message = "Le commentaire ne doit pas dépasser 500 caractères")
    String commentaire,

    String origineFonds,

    String justificationLcbFt
) {
}
