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

import dev.lions.unionflow.server.api.dto.solidarite.BeneficiaireAideDTO;
import dev.lions.unionflow.server.api.dto.solidarite.ContactUrgenceDTO;
import dev.lions.unionflow.server.api.dto.solidarite.LocalisationDTO;
import dev.lions.unionflow.server.api.dto.solidarite.PieceJustificativeDTO;
import dev.lions.unionflow.server.api.enums.solidarite.PrioriteAide;
import dev.lions.unionflow.server.api.enums.solidarite.TypeAide;
import dev.lions.unionflow.server.api.validation.ValidationConstants;
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.List;
import java.util.Map;
import java.util.UUID;
import lombok.Builder;

/**
 * Requête de création d'une demande d'aide.
 */
@Builder
public record CreateDemandeAideRequest(
                @NotNull(message = "Le type d'aide est obligatoire.") TypeAide typeAide,
                @NotBlank(message = "Le titre" + ValidationConstants.OBLIGATOIRE_MESSAGE) @Size(max = 200) String titre,
                @NotBlank(message = "La description"
                                + ValidationConstants.OBLIGATOIRE_MESSAGE) @Size(max = 2000) String description,
                @Size(max = 1000) String justification,
                @DecimalMin(value = "0", inclusive = false) @Digits(integer = 12, fraction = 2) BigDecimal montantDemande,
                @Pattern(regexp = "^[A-Z]{3}$") String devise,
                @NotNull(message = "L'identifiant du demandeur est obligatoire") UUID membreDemandeurId,
                @NotNull(message = "L'identifiant de l'organisation est obligatoire") UUID associationId,
                PrioriteAide priorite,
                List<PieceJustificativeDTO> piecesJustificatives,
                List<BeneficiaireAideDTO> beneficiaires,
                Map<String, Object> donneesPersonnalisees,
                List<String> tags,
                Boolean estConfidentielle,
                LocalisationDTO localisation,
                ContactUrgenceDTO contactUrgence,
                LocalDate dateLimite) {
}
