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

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

import java.time.LocalDateTime;
import java.util.List;

/**
 * DTO pour les commentaires sur une demande d'aide
 * 
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentaireAideDTO {
    
    /**
     * Identifiant unique du commentaire
     */
    private String id;
    
    /**
     * Contenu du commentaire
     */
    @NotBlank(message = "Le contenu du commentaire est obligatoire")
    @Size(min = 5, max = 2000, message = "Le commentaire doit contenir entre 5 et 2000 caractères")
    private String contenu;
    
    /**
     * Type de commentaire
     */
    @NotBlank(message = "Le type de commentaire est obligatoire")
    private String typeCommentaire;
    
    /**
     * Date de création du commentaire
     */
    @NotNull(message = "La date de création est obligatoire")
    @Builder.Default
    private LocalDateTime dateCreation = LocalDateTime.now();
    
    /**
     * Date de dernière modification
     */
    private LocalDateTime dateModification;
    
    /**
     * Identifiant de l'auteur du commentaire
     */
    @NotBlank(message = "L'identifiant de l'auteur est obligatoire")
    private String auteurId;
    
    /**
     * Nom de l'auteur du commentaire
     */
    private String auteurNom;
    
    /**
     * Rôle de l'auteur
     */
    private String auteurRole;
    
    /**
     * Indique si le commentaire est privé (visible seulement aux évaluateurs)
     */
    @Builder.Default
    private Boolean estPrive = false;
    
    /**
     * Indique si le commentaire est important
     */
    @Builder.Default
    private Boolean estImportant = false;
    
    /**
     * Identifiant du commentaire parent (pour les réponses)
     */
    private String commentaireParentId;
    
    /**
     * Réponses à ce commentaire
     */
    private List<CommentaireAideDTO> reponses;
    
    /**
     * Pièces jointes au commentaire
     */
    private List<PieceJustificativeDTO> piecesJointes;
    
    /**
     * Mentions d'utilisateurs dans le commentaire
     */
    private List<String> mentionsUtilisateurs;
    
    /**
     * Indique si le commentaire a été modifié
     */
    @Builder.Default
    private Boolean estModifie = false;
    
    /**
     * Nombre de likes/réactions
     */
    @Builder.Default
    private Integer nombreReactions = 0;
    
    /**
     * Indique si le commentaire est résolu (pour les questions)
     */
    @Builder.Default
    private Boolean estResolu = false;
    
    /**
     * Date de résolution
     */
    private LocalDateTime dateResolution;
    
    /**
     * Identifiant de la personne qui a marqué comme résolu
     */
    private String resoluteurId;
}
