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 géolocalisation
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class LocalisationDTO {

  /** Latitude */
  @DecimalMin(value = "-90.0", message = "La latitude doit être comprise entre -90 et 90")
  @DecimalMax(value = "90.0", message = "La latitude doit être comprise entre -90 et 90")
  private Double latitude;

  /** Longitude */
  @DecimalMin(value = "-180.0", message = "La longitude doit être comprise entre -180 et 180")
  @DecimalMax(value = "180.0", message = "La longitude doit être comprise entre -180 et 180")
  private Double longitude;

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

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

  /** Région/Province */
  @Size(max = 100, message = "La région ne peut pas dépasser 100 caractères")
  private String region;

  /** Pays */
  @Size(max = 100, message = "Le pays ne peut pas dépasser 100 caractères")
  private String pays;

  /** Code postal */
  @Size(max = 20, message = "Le code postal ne peut pas dépasser 20 caractères")
  private String codePostal;

  /** Précision de la localisation en mètres */
  @Min(value = 0, message = "La précision doit être positive")
  private Double precision;

  /** Indique si la localisation est approximative */
  @Builder.Default private Boolean estApproximative = false;
}
