package dev.lions.unionflow.server.api.dto.tontine;

import dev.lions.unionflow.server.api.enums.tontine.FrequenceTour;
import dev.lions.unionflow.server.api.enums.tontine.TypeTontine;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.media.Schema;

import java.math.BigDecimal;
import java.time.LocalDate;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "Requête de création/paramétrage d'une tontine")
public class TontineRequest {

    @NotBlank(message = "Le nom de la tontine est obligatoire")
    private String nom;

    private String description;

    @NotBlank(message = "L'ID de l'organisation est obligatoire")
    private String organisationId;

    @NotNull(message = "Le type de tontine est obligatoire")
    private TypeTontine typeTontine;

    @NotNull(message = "La fréquence des tours est obligatoire")
    private FrequenceTour frequence;

    @NotNull(message = "La date de début souhaitée est obligatoire")
    private LocalDate dateDebutPrevue;

    @Schema(description = "Montant fixe si tontine classique")
    @DecimalMin(value = "0.0", message = "Le montant de cotisation ne peut pas être négatif")
    private BigDecimal montantMiseParTour;

    @Schema(description = "Le nombre maximum de membres pouvant rejoindre cette tontine (Optionnel)")
    @Min(value = 2, message = "Une tontine nécessite au moins 2 membres")
    private Integer limiteParticipants;
}
