namespace TrajetKmTracker.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); }