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

import dev.lions.unionflow.server.api.dto.base.BaseDTO;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;

/**
 * DTO pour le catalogue des types d'organisation.
 *
 * <p>Permet de gérer dynamiquement la liste des types utilisables par les organisations
 * (codes, libellés, ordre d'affichage, activation/désactivation dans l'UI).
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-15
 */
@Getter
@Setter
public class TypeOrganisationDTO extends BaseDTO {

  private static final long serialVersionUID = 1L;

  /** Code fonctionnel unique du type (ex: LIONS_CLUB, ASSOCIATION, COOPERATIVE, ...) */
  @NotBlank(message = "Le code du type d'organisation est obligatoire")
  @Size(max = 50, message = "Le code du type d'organisation ne peut pas dépasser 50 caractères")
  private String code;

  /** Libellé affiché dans l'interface utilisateur */
  @NotBlank(message = "Le libellé du type d'organisation est obligatoire")
  @Size(max = 150, message = "Le libellé du type d'organisation ne peut pas dépasser 150 caractères")
  private String libelle;

  /** Description fonctionnelle (optionnelle) */
  @Size(max = 500, message = "La description ne peut pas dépasser 500 caractères")
  private String description;

  /** Ordre d'affichage dans les listes déroulantes */
  private Integer ordreAffichage;

  /** Indique si le type est actif dans l'application */
  private Boolean actif = true;
}


