using SchotzIadKmTracker.Api.Models.DTOs;
namespace SchotzIadKmTracker.Api.Services;
///
/// Logique métier de gestion des véhicules : historique, véhicule courant,
/// création (avec détection de réaffectation) et réaffectation des trajets.
///
public interface IVehiculeService
{
/// Retourne l'historique complet des véhicules (plaque, puissance fiscale, date d'effet), trié par Date_Effet décroissante.
Task> GetHistoriqueAsync(CancellationToken cancellationToken = default);
///
/// Retourne le Véhicule_Courant : Date_Effet la plus récente parmi celles <= aujourd'hui.
/// Lève si aucun véhicule n'est applicable.
///
Task GetVehiculeCourantAsync(CancellationToken cancellationToken = default);
///
/// Résout le véhicule applicable à une date donnée (pour l'association d'un trajet) :
/// Date_Effet la plus récente <= .
/// Retourne null si aucun véhicule n'est applicable à cette date.
///
Task GetVehiculeADateAsync(DateOnly date, CancellationToken cancellationToken = default);
///
/// Crée un véhicule, conserve l'historique et détecte les trajets à réaffecter
/// (date >= Date_Effet et puissance fiscale différente).
/// Lève si la Date_Effet est postérieure à aujourd'hui.
///
Task CreateAsync(CreateVehiculeDto dto, CancellationToken cancellationToken = default);
///
/// Applique (ou non) la réaffectation des trajets au véhicule indiqué.
/// Si est vrai, met à jour VehiculeId + PuissanceFiscale
/// de tous les trajets dont la Date >= Date_Effet du véhicule ; sinon ne change rien.
/// Lève si le véhicule n'existe pas.
///
Task ReaffecterAsync(ReaffectationDto dto, CancellationToken cancellationToken = default);
}