namespace SchotzIadKmTracker.Api.Models.DTOs; // Création — les coordonnées sont transmises par le Frontend (issues de la sélection BAN) public record CreateTrajetDto( string Date, // JJ/MM/AAAA en entrée string AdresseDepart, double? DepartLatitude, // null si adresse saisie manuellement sans BAN double? DepartLongitude, string AdresseArrivee, double? ArriveeLatitude, // null si adresse saisie manuellement sans BAN double? ArriveeLongitude, string? Commentaire, // optionnel, max 500 car. int? VehiculeId, // optionnel ; null → véhicule courant à la date du trajet bool AllerRetour = false // true → distance comptée doublée (aller/retour) ); // Mise à jour public record UpdateTrajetDto( string Date, string AdresseDepart, double? DepartLatitude, double? DepartLongitude, string AdresseArrivee, double? ArriveeLatitude, double? ArriveeLongitude, string? Commentaire, int? VehiculeId, // optionnel ; null → véhicule courant à la date du trajet bool AllerRetour = false // true → distance comptée doublée (aller/retour) ); // Réponse trajet public record TrajetDto( int Id, DateOnly Date, string AdresseDepart, string AdresseArrivee, // IMPORTANT : ce champ expose la DISTANCE EFFECTIVE (distance comptée), c'est-à-dire la // distance simple doublée lorsque AllerRetour vaut true. Le doublement est appliqué à la // source du DTO afin que la liste, la carte et le PDF affichent directement la distance // comptée sans logique supplémentaire. null si la distance n'a pas pu être calculée (Exigence 2.4). decimal? Distance, string? Commentaire, decimal Position, // rang dans la journée int VehiculeId, int PuissanceFiscale, bool AllerRetour // information aller/retour conservée par trajet ); // Trajet enrichi pour la carte public record TrajetCarteDto( int Id, DateOnly Date, string AdresseDepart, string AdresseArrivee, // Distance EFFECTIVE (doublée si AllerRetour), pour cohérence avec l'affichage de la liste. decimal Distance, double? DepartLatitude, double? DepartLongitude, double? ArriveeLatitude, double? ArriveeLongitude, string? GeometrieJson, // GeoJSON LineString ou null string? Commentaire = null, // commentaire du trajet (affiché dans l'infobulle carte) bool AllerRetour = false // information aller/retour conservée par trajet ); // Réordonnancement manuel des trajets d'une journée public record ReordonnerTrajetsDto( IReadOnlyList Trajets ); public record TrajetPositionDto( int Id, decimal Position );