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

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

/**
 * DTO pour les pièces justificatives d'une demande d'aide
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PieceJustificativeDTO {

  /** Identifiant unique de la pièce justificative */
  private String id;

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

  /** Type de pièce justificative */
  @NotBlank(message = "Le type de pièce est obligatoire")
  private String typePiece;

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

  /** URL ou chemin d'accès au fichier */
  @NotBlank(message = "L'URL du fichier est obligatoire")
  private String urlFichier;

  /** Type MIME du fichier */
  private String typeMime;

  /** Taille du fichier en octets */
  @Min(value = 1, message = "La taille du fichier doit être positive")
  private Long tailleFichier;

  /** Indique si la pièce est obligatoire */
  @Builder.Default private Boolean estObligatoire = false;

  /** Indique si la pièce a été vérifiée */
  @Builder.Default private Boolean estVerifiee = false;

  /** Date d'ajout de la pièce */
  @Builder.Default private LocalDateTime dateAjout = LocalDateTime.now();

  /** Date de vérification */
  private LocalDateTime dateVerification;

  /** Identifiant de la personne qui a vérifié */
  private String verificateurId;

  /** Commentaires sur la vérification */
  @Size(max = 500, message = "Les commentaires ne peuvent pas dépasser 500 caractères")
  private String commentairesVerification;
}
