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

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
import lombok.Builder;

/**
 * Requête de création d'une adhésion.
 *
 * @author UnionFlow Team
 * @version 1.0
 */
@Builder
public record CreateAdhesionRequest(
        @NotBlank(message = "Le numéro de référence est obligatoire") @Size(max = 50, message = "Le numéro de référence ne peut pas dépasser 50 caractères") String numeroReference,

        @NotNull(message = "L'identifiant du membre est obligatoire") UUID membreId,
        @NotNull(message = "L'identifiant de l'organisation est obligatoire") UUID organisationId,
        @NotNull(message = "La date de demande est obligatoire") LocalDate dateDemande,

        @NotNull(message = "Les frais d'adhésion sont obligatoires") @DecimalMin(value = "0.0", inclusive = false, message = "Les frais d'adhésion doivent être positifs") @Digits(integer = 10, fraction = 2, message = "Format de montant invalide") BigDecimal fraisAdhesion,

        @NotBlank(message = "Le code devise est obligatoire") @Pattern(regexp = "^[A-Z]{3}$", message = "Le code devise doit être un code ISO à 3 lettres") String codeDevise,

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