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 java.util.UUID;
import lombok.Builder;

/**
 * Requête pour initier un paiement en ligne via un gateway (Wave, Orange, Free Money, Carte).
 *
 * @param cotisationId ID de la cotisation à payer
 * @param methodePaiement Méthode de paiement (WAVE, ORANGE_MONEY, FREE_MONEY, CARTE_BANCAIRE)
 * @param numeroTelephone Numéro de téléphone pour Wave/Orange/Free (format: 221771234567)
 * @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 InitierPaiementEnLigneRequest(
    @NotNull(message = "L'ID de la cotisation est obligatoire")
    UUID cotisationId,

    @NotBlank(message = "La méthode de paiement est obligatoire")
    @Pattern(regexp = "^(WAVE|ORANGE_MONEY|FREE_MONEY|CARTE_BANCAIRE)$",
        message = "Méthode de paiement invalide. Valeurs autorisées : WAVE, ORANGE_MONEY, FREE_MONEY, CARTE_BANCAIRE")
    String methodePaiement,

    @NotBlank(message = "Le numéro de téléphone est obligatoire")
    @Pattern(regexp = "^\\d{9,15}$", message = "Numéro de téléphone invalide (9-15 chiffres)")
    String numeroTelephone,

    String origineFonds,

    String justificationLcbFt
) {
}
