using TrajetKmTracker.Api.Models.DTOs;
namespace TrajetKmTracker.Api.Services;
///
/// Calcul des totaux du Panneau_Totaux (jour, mois, Total_Annuel_Partiel) filtrés par véhicule
/// et fourniture des données de navigation temporelle (années, mois et jours disponibles).
///
public interface ITotauxService
{
///
/// Calcule, pour la sélectionnée et le véhicule indiqué, les totaux
/// kilométriques affichés dans le Panneau_Totaux (Exigences 12.7, 12.8, 12.19) :
///
/// - TotalJour : somme des distances des Trajets de la journée.
/// - TotalMois : somme des distances des Trajets du mois de la date.
/// - TotalAnnuelPartiel : cumul de l'année jusqu'au mois de la date inclus,
/// à l'exclusion des mois strictement postérieurs (Property 17).
///
/// Les distances nulles sont comptées comme 0 et tous les totaux sont arrondis à 2 décimales.
/// Seuls les Trajets du véhicule sont additionnés (Property 21).
/// Si vaut null, le Véhicule_Courant est utilisé
/// (via ).
///
Task GetTotauxAsync(DateOnly date, int? vehiculeId = null, CancellationToken cancellationToken = default);
///
/// Retourne la liste des années comportant au moins un Trajet, à laquelle est ajoutée
/// l'année courante si elle n'y figure pas déjà (Exigence 12.15). Liste triée croissante.
///
Task> GetAnneesDisponiblesAsync(CancellationToken cancellationToken = default);
///
/// Retourne la liste des mois (1..12) de l'année comportant au moins
/// un Trajet (Exigence 12.16). Liste triée croissante.
///
Task> GetMoisDisponiblesAsync(int annee, CancellationToken cancellationToken = default);
///
/// Retourne la liste des jours du mois de l'année
/// comportant au moins un Trajet (Exigence 12.16). Liste triée croissante.
///
Task> GetJoursDisponiblesAsync(int annee, int mois, CancellationToken cancellationToken = default);
}