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

import java.math.BigDecimal;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * DTO de réponse pour l'initiation d'un paiement en ligne via un gateway.
 * Retourne l'URL de redirection vers le gateway (Wave, Orange, Free Money, Carte).
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2026-03-02
 */
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class PaiementGatewayResponse {
    /**
     * ID de la transaction créée
     */
    private UUID transactionId;

    /**
     * URL de redirection vers le gateway de paiement
     */
    private String redirectUrl;

    /**
     * Montant à payer (en FCFA)
     */
    private BigDecimal montant;

    /**
     * Statut de la transaction (EN_ATTENTE, VALIDE, ECHOUE)
     */
    private String statut;

    /**
     * Méthode de paiement (WAVE, ORANGE_MONEY, FREE_MONEY, CARTE_BANCAIRE)
     */
    private String methodePaiement;

    /**
     * Référence de la cotisation
     */
    private String referenceCotisation;

    /**
     * Message d'information pour l'utilisateur
     */
    private String message;

    /**
     * URL Wave pour ouvrir l'app Wave (redirection automatique membre).
     * Présent lorsque methodePaiement = WAVE.
     */
    private String waveLaunchUrl;

    /**
     * ID de session Checkout Wave (cos-xxx). Pour réconciliation / webhook.
     */
    private String waveCheckoutSessionId;

    /**
     * Référence client (UUID intention) pour le deep link de retour.
     */
    private String clientReference;
}
