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

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

/**
 * DTO pour les informations de contact d'urgence
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ContactUrgenceDTO {

  /** Nom complet du contact d'urgence */
  @NotBlank(message = "Le nom du contact d'urgence est obligatoire")
  @Size(max = 100, message = "Le nom ne peut pas dépasser 100 caractères")
  private String nomComplet;

  /** Relation avec le demandeur */
  @NotBlank(message = "La relation avec le demandeur est obligatoire")
  @Size(max = 50, message = "La relation ne peut pas dépasser 50 caractères")
  private String relation;

  /** Numéro de téléphone principal */
  @NotBlank(message = "Le numéro de téléphone est obligatoire")
  @Pattern(regexp = "^\\+?[0-9]{8,15}$", message = "Le numéro de téléphone n'est pas valide")
  private String telephonePrincipal;

  /** Numéro de téléphone secondaire */
  @Pattern(
      regexp = "^\\+?[0-9]{8,15}$",
      message = "Le numéro de téléphone secondaire n'est pas valide")
  private String telephoneSecondaire;

  /** Adresse email */
  @Email(message = "L'adresse email n'est pas valide")
  private String email;

  /** Adresse physique */
  @Size(max = 200, message = "L'adresse ne peut pas dépasser 200 caractères")
  private String adresse;

  /** Disponibilité (horaires) */
  @Size(max = 100, message = "La disponibilité ne peut pas dépasser 100 caractères")
  private String disponibilite;

  /** Indique si ce contact peut prendre des décisions pour le demandeur */
  @Builder.Default private Boolean peutPrendreDecisions = false;

  /** Indique si ce contact doit être notifié automatiquement */
  @Builder.Default private Boolean notificationAutomatique = true;

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