using TrajetKmTracker.Api.Models.DTOs;
namespace TrajetKmTracker.Api.Services;
///
/// Gestion du Cache_Adresses : recherche locale des adresses déjà connues, mise en cache
/// (upsert) des adresses géocodées et politique d'éviction LRU.
///
public interface IAdresseCacheService
{
///
/// Recherche locale des adresses en cache correspondant au fragment fourni.
/// Retourne une liste vide si le fragment fait moins de 3 caractères (Requirement 9.3).
/// Les suggestions sont ordonnées de la plus récemment utilisée à la plus ancienne.
///
/// Fragment de recherche (min. 3 caractères).
/// Nombre maximal de suggestions retournées (par défaut 5).
Task> RechercherLocalAsync(
string query,
int limite = 5,
CancellationToken cancellationToken = default);
///
/// Recherche l'entrée du cache correspondant exactement à l'adresse fournie (après normalisation).
/// Utilisé lors de la création d'un Trajet pour éviter un appel BAN (Requirement 9.2).
/// Met à jour la date de dernière utilisation de l'entrée trouvée.
///
/// Les coordonnées et la géométrie si l'adresse est en cache, sinon null.
Task ObtenirParAdresseAsync(
string adresse,
CancellationToken cancellationToken = default);
///
/// Insère l'adresse dans le cache si elle est absente, sinon met uniquement à jour sa date de
/// dernière utilisation sans modifier ses coordonnées (Requirements 9.1, 9.6). Applique ensuite
/// la politique d'éviction LRU (Requirement 9.5). L'ensemble s'exécute en transaction.
///
/// Libellé de l'adresse (sera normalisé pour le matching).
/// Latitude à utiliser si l'adresse est nouvelle.
/// Longitude à utiliser si l'adresse est nouvelle.
/// Géométrie GeoJSON optionnelle si l'adresse est nouvelle.
Task UpsertAdresseAsync(
string adresse,
double latitude,
double longitude,
string? geometrieJson = null,
CancellationToken cancellationToken = default);
}