package dev.lions.unionflow.server.api.dto.mutuelle.credit;

import dev.lions.unionflow.server.api.enums.mutuelle.credit.TypeCredit;
import dev.lions.unionflow.server.api.enums.mutuelle.credit.TypeGarantie;
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.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "Requête initiale pour une demande de financement (Crédit)")
public class DemandeCreditRequest {

    @NotBlank(message = "L'ID du demandeur est obligatoire")
    private String membreId;

    @NotNull(message = "Le type de crédit est obligatoire")
    private TypeCredit typeCredit;

    @NotNull(message = "Le montant demandé est obligatoire")
    @DecimalMin(value = "1.0", message = "Le montant demandé doit être positif")
    private BigDecimal montantDemande;

    @Min(value = 1, message = "La durée (en mois) doit être au moins de 1 mois")
    private Integer dureeMois;

    @Schema(description = "Compte épargne adossé (si remboursement automatique ou nantissement)")
    private String compteLieId;

    @NotBlank(message = "Le motif détaillé du financement est requis (Plan d'affaires, usage...)")
    private String justificationDetaillee;

    @Schema(description = "Liste des IDs de documents justificatifs attachés au dossier")
    private List<String> documentIds;

    @Schema(description = "Liste des garanties proposées avec la demande")
    private List<GarantieDemandeDTO> garantiesProposees;
}
