namespace SchotzIadKmTracker.Api.Services;
///
/// Orchestre le calcul de la distance d'un trajet à partir des adresses de départ et
/// d'arrivée et de leurs coordonnées éventuelles.
///
/// Logique :
///
/// - Si les deux coordonnées sont connues → appel ORS ; en cas de timeout/échec ORS
/// → fallback orthodromique (Haversine), sans erreur pour l'utilisateur.
/// - Si une coordonnée est absente → géocodage BAN de l'adresse manquante
/// (meilleur résultat) AVANT tout appel ORS ; ORS n'est jamais appelé avec des
/// coordonnées nulles (Property 16).
/// - Si BAN ne peut pas résoudre (aucun résultat ou indisponible) → distance nulle
/// + avertissement, sans erreur bloquante, pour que l'appelant stocke la distance null.
///
///
public interface IDistanceCalculator
{
///
/// Calcule la distance entre et
/// , en résolvant au besoin les coordonnées manquantes
/// via BAN, puis en appelant ORS (avec fallback Haversine).
///
/// Texte de l'adresse de départ.
/// Texte de l'adresse d'arrivée.
/// Latitude de départ connue, ou null.
/// Longitude de départ connue, ou null.
/// Latitude d'arrivée connue, ou null.
/// Longitude d'arrivée connue, ou null.
/// Jeton d'annulation.
/// Un (jamais d'exception bloquante).
Task CalculerAsync(
string adresseDepart,
string adresseArrivee,
double? departLatitude,
double? departLongitude,
double? arriveeLatitude,
double? arriveeLongitude,
CancellationToken cancellationToken = default);
}