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

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.media.Schema;

import java.math.BigDecimal;

/**
 * Requête de création/mise à jour des paramètres LCB-FT (Lutte contre le Blanchiment et le Financement du Terrorisme).
 * Définit les seuils au-dessus desquels les justifications d'origine des fonds sont obligatoires.
 *
 * @author lions dev Team
 * @version 1.0
 * @since 2026-03-13
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "Paramètres LCB-FT (seuils de vigilance)")
public class ParametresLcbFtRequest {

    @Schema(description = "ID de l'organisation (null pour paramètres plateforme)")
    private String organisationId;

    @NotNull(message = "Le montant seuil de justification est obligatoire")
    @DecimalMin(value = "0", message = "Le montant doit être positif ou nul")
    @Schema(description = "Montant au-dessus duquel l'origine des fonds est obligatoire (ex. 500000 XOF)", example = "500000")
    private BigDecimal montantSeuilJustification;

    @NotNull(message = "Le montant seuil de validation manuelle est obligatoire")
    @DecimalMin(value = "0", message = "Le montant doit être positif ou nul")
    @Schema(description = "Montant au-dessus duquel une validation manuelle est requise (ex. 1000000 XOF)", example = "1000000")
    private BigDecimal montantSeuilValidationManuelle;

    @NotBlank(message = "Le code devise est obligatoire")
    @Size(max = 3, message = "Le code devise doit faire 3 caractères (ISO 4217)")
    @Schema(description = "Code devise ISO 4217 (ex. XOF, EUR, USD)", example = "XOF")
    private String codeDevise;

    @Schema(description = "Notes ou commentaires sur la configuration")
    private String notes;
}
