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

import dev.lions.unionflow.server.api.enums.solidarite.StatutAide;
import jakarta.validation.constraints.*;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * DTO pour l'historique des changements de statut d'une demande d'aide
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class HistoriqueStatutDTO {

  /** Identifiant unique de l'entrée d'historique */
  private String id;

  /** Ancien statut */
  private StatutAide ancienStatut;

  /** Nouveau statut */
  @NotNull(message = "Le nouveau statut est obligatoire")
  private StatutAide nouveauStatut;

  /** Date du changement de statut */
  @NotNull(message = "La date de changement est obligatoire")
  @Builder.Default
  private LocalDateTime dateChangement = LocalDateTime.now();

  /** Identifiant de la personne qui a effectué le changement */
  @NotBlank(message = "L'identifiant de l'auteur est obligatoire")
  private String auteurId;

  /** Nom de la personne qui a effectué le changement */
  private String auteurNom;

  /** Motif du changement de statut */
  @Size(max = 500, message = "Le motif ne peut pas dépasser 500 caractères")
  private String motif;

  /** Commentaires additionnels */
  @Size(max = 1000, message = "Les commentaires ne peuvent pas dépasser 1000 caractères")
  private String commentaires;

  /** Indique si le changement est automatique (système) */
  @Builder.Default private Boolean estAutomatique = false;

  /** Durée en minutes depuis le statut précédent */
  private Long dureeDepuisPrecedent;

  /** Données additionnelles liées au changement */
  private java.util.Map<String, Object> donneesAdditionnelles;
}
