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

import dev.lions.unionflow.server.api.enums.vote.ModeScrutin;
import dev.lions.unionflow.server.api.enums.vote.TypeVote;
import jakarta.validation.constraints.Future;
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.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "Requête de création d'une campagne de vote électronique")
public class CampagneVoteRequest {

    @NotBlank(message = "Le titre de la campagne est obligatoire")
    private String titre;

    private String descriptionOuResolution;

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

    @NotNull(message = "Le type de vote est requis")
    private TypeVote typeVote;

    @NotNull(message = "Le mode de scrutin est requis")
    private ModeScrutin modeScrutin;

    @NotNull(message = "La date d'ouverture des scrutins est obligatoire")
    @Future(message = "L'ouverture des votes doit être une date future")
    private LocalDateTime dateOuverture;

    @NotNull(message = "La date de fermeture est obligatoire")
    @Future(message = "La fermeture des votes doit être une date future")
    private LocalDateTime dateFermeture;

    @Schema(description = "Restreindre le vote aux membres à jour de cotisations (Optionnel)")
    @Builder.Default
    private Boolean restreindreMembresAJour = true;

    @Schema(description = "Permettre le vote blanc (Optionnel)")
    @Builder.Default
    private Boolean autoriserVoteBlanc = true;
}
