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

import jakarta.validation.constraints.DecimalMax;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.UUID;

/**
 * Requete de création d'une adresse.
 *
 * @author UnionFlow Team
 * @version 3.0
 */
public record CreateAdresseRequest(
        @NotBlank(message = "Le type d'adresse est obligatoire") String typeAdresse, // Code depuis types_reference

        @NotBlank(message = "L'adresse est obligatoire") String adresse,

        String complementAdresse,
        String codePostal,

        @NotBlank(message = "La ville est obligatoire") String ville,

        String region,

        @NotBlank(message = "Le pays est obligatoire") String pays,

        @DecimalMin(value = "-90.0", message = "La latitude doit être comprise entre -90 et 90") @DecimalMax(value = "90.0", message = "La latitude doit être comprise entre -90 et 90") @Digits(integer = 3, fraction = 6) BigDecimal latitude, // Optionnel

        @DecimalMin(value = "-180.0", message = "La longitude doit être comprise entre -180 et 180") @DecimalMax(value = "180.0", message = "La longitude doit être comprise entre -180 et 180") @Digits(integer = 3, fraction = 6) BigDecimal longitude, // Optionnel

        @NotNull(message = "L'indicateur principale est obligatoire") Boolean principale,

        String libelle,
        String notes,

        UUID organisationId, // Exclusive: soit organisationId, soit membreId, soit evenementId
        UUID membreId,
        UUID evenementId) {
}
