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

import dev.lions.unionflow.server.api.dto.base.BaseDTO;
import dev.lions.unionflow.server.api.enums.notification.PrioriteNotification;
import dev.lions.unionflow.server.api.enums.notification.StatutNotification;
import dev.lions.unionflow.server.api.enums.notification.TypeNotification;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;

/**
 * DTO pour la gestion des notifications
 *
 * @author UnionFlow Team
 * @version 3.0
 * @since 2025-01-29
 */
@Getter
@Setter
public class NotificationDTO extends BaseDTO {

  private static final long serialVersionUID = 1L;

  /** Type de notification */
  @NotNull(message = "Le type de notification est obligatoire")
  private TypeNotification typeNotification;

  /** Priorité */
  private PrioriteNotification priorite;

  /** Statut */
  private StatutNotification statut;

  /** Sujet */
  private String sujet;

  /** Corps du message */
  private String corps;

  /** Date d'envoi prévue */
  private LocalDateTime dateEnvoiPrevue;

  /** Date d'envoi réelle */
  private LocalDateTime dateEnvoi;

  /** Date de lecture */
  private LocalDateTime dateLecture;

  /** Nombre de tentatives */
  private Integer nombreTentatives;

  /** Message d'erreur */
  private String messageErreur;

  /** Données additionnelles (JSON) */
  private String donneesAdditionnelles;

  /** ID du membre */
  private UUID membreId;

  /** ID de l'organisation */
  private UUID organisationId;

  /** ID du template */
  private UUID templateId;
}
