using TrajetKmTracker.Api.Models.DTOs;
namespace TrajetKmTracker.Api.Services;
///
/// Gestion du Carnet_Adresses : CRUD des Adresses_Nommées avec normalisation de la Dénomination
/// (unicité) et résolution des coordonnées via le Cache_Adresses ou l'API BAN (Exigence 15).
///
public interface IAdresseNommeeService
{
///
/// Liste toutes les Adresses_Nommées du Carnet_Adresses, triées par Dénomination (Exigence 15.1).
///
Task> GetAllAsync(CancellationToken cancellationToken = default);
///
/// Crée une Adresse_Nommee : vérifie l'unicité de la Dénomination normalisée (15.6/15.7),
/// réutilise le Cache_Adresses si l'adresse y est déjà présente (15.10) ou géocode via BAN (15.11),
/// persiste avec ou sans coordonnées (15.5/15.12) et met en cache les coordonnées obtenues (15.9).
///
/// Dénomination normalisée déjà utilisée (400).
Task CreateAsync(SaveAdresseNommeeDto dto, CancellationToken cancellationToken = default);
///
/// Modifie une Adresse_Nommee existante. Si le texte d'adresse a changé et n'est pas en cache,
/// re-géocode via BAN (15.11). Applique le contrôle d'unicité de la Dénomination (15.7).
///
/// Adresse_Nommee introuvable (404).
/// Dénomination normalisée déjà utilisée (400).
Task UpdateAsync(int id, SaveAdresseNommeeDto dto, CancellationToken cancellationToken = default);
///
/// Supprime une Adresse_Nommee du Carnet_Adresses. Les Trajets existants ne sont pas modifiés
/// (ils conservent leur texte d'adresse et leurs coordonnées) (Exigence 15.14).
///
/// Adresse_Nommee introuvable (404).
Task DeleteAsync(int id, CancellationToken cancellationToken = default);
}