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

import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.validation.constraints.*;

/**
 * DTO pour les préférences spécifiques à un type de notification
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PreferenceTypeNotificationDTO {

  /** Indique si ce type de notification est activé */
  private Boolean active;

  /** Priorité personnalisée (1-5) */
  @Min(value = 1, message = "La priorité doit être comprise entre 1 et 5")
  @Max(value = 5, message = "La priorité doit être comprise entre 1 et 5")
  private Integer priorite;

  /** Son personnalisé pour ce type */
  private String sonPersonnalise;

  /** Pattern de vibration personnalisé */
  private long[] patternVibration;

  /** Couleur LED personnalisée */
  private String couleurLED;

  /** Durée d'affichage personnalisée (secondes) */
  @Min(value = 1, message = "La durée d'affichage doit être au moins 1 seconde")
  @Max(value = 300, message = "La durée d'affichage ne peut pas dépasser 5 minutes")
  private Integer dureeAffichageSecondes;

  /** Indique si les notifications de ce type doivent vibrer */
  private Boolean doitVibrer;

  /** Indique si les notifications de ce type doivent émettre un son */
  private Boolean doitEmettreSon;

  /** Indique si les notifications de ce type doivent allumer la LED */
  private Boolean doitAllumerLED;

  /** Indique si ce type ignore le mode silencieux */
  private Boolean ignoreModesilencieux;

  // Constructeurs, getters et setters
  public PreferenceTypeNotificationDTO() {}

  public Boolean getActive() {
    return active;
  }

  public void setActive(Boolean active) {
    this.active = active;
  }

  public Integer getPriorite() {
    return priorite;
  }

  public void setPriorite(Integer priorite) {
    this.priorite = priorite;
  }

  public String getSonPersonnalise() {
    return sonPersonnalise;
  }

  public void setSonPersonnalise(String sonPersonnalise) {
    this.sonPersonnalise = sonPersonnalise;
  }

  public long[] getPatternVibration() {
    return patternVibration;
  }

  public void setPatternVibration(long[] patternVibration) {
    this.patternVibration = patternVibration;
  }

  public String getCouleurLED() {
    return couleurLED;
  }

  public void setCouleurLED(String couleurLED) {
    this.couleurLED = couleurLED;
  }

  public Integer getDureeAffichageSecondes() {
    return dureeAffichageSecondes;
  }

  public void setDureeAffichageSecondes(Integer dureeAffichageSecondes) {
    this.dureeAffichageSecondes = dureeAffichageSecondes;
  }

  public Boolean getDoitVibrer() {
    return doitVibrer;
  }

  public void setDoitVibrer(Boolean doitVibrer) {
    this.doitVibrer = doitVibrer;
  }

  public Boolean getDoitEmettreSon() {
    return doitEmettreSon;
  }

  public void setDoitEmettreSon(Boolean doitEmettreSon) {
    this.doitEmettreSon = doitEmettreSon;
  }

  public Boolean getDoitAllumerLED() {
    return doitAllumerLED;
  }

  public void setDoitAllumerLED(Boolean doitAllumerLED) {
    this.doitAllumerLED = doitAllumerLED;
  }

  public Boolean getIgnoreModeSilencieux() {
    return ignoreModesilencieux;
  }

  public void setIgnoreModeSilencieux(Boolean ignoreModesilencieux) {
    this.ignoreModesilencieux = ignoreModesilencieux;
  }
}
