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

import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * DTO pour les critères de sélection des bénéficiaires
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CritereSelectionDTO {

  /** Nom du critère */
  @NotBlank(message = "Le nom du critère est obligatoire")
  @Size(max = 100, message = "Le nom ne peut pas dépasser 100 caractères")
  private String nom;

  /** Type de critère (age, situation, localisation, etc.) */
  @NotBlank(message = "Le type de critère est obligatoire")
  private String type;

  /** Opérateur de comparaison (equals, greater_than, less_than, contains, etc.) */
  @NotBlank(message = "L'opérateur est obligatoire")
  private String operateur;

  /** Valeur de référence pour la comparaison */
  @NotBlank(message = "La valeur est obligatoire")
  private String valeur;

  /** Valeur maximale (pour les plages) */
  private String valeurMax;

  /** Indique si le critère est obligatoire */
  @Builder.Default private Boolean estObligatoire = false;

  /** Poids du critère dans la sélection (1-10) */
  @Min(value = 1, message = "Le poids doit être au moins 1")
  @Max(value = 10, message = "Le poids ne peut pas dépasser 10")
  @Builder.Default
  private Integer poids = 5;

  /** Description du critère */
  @Size(max = 200, message = "La description ne peut pas dépasser 200 caractères")
  private String description;
}
