using TrajetKmTracker.Api.Models.Entities;
namespace TrajetKmTracker.Api.Repositories;
///
/// Accès aux données des véhicules et aux trajets impactés par une réaffectation.
/// L'historique des véhicules est conservé (aucune suppression) — Exigence 10.12 / Property 22.
///
public interface IVehiculeRepository
{
/// Retourne l'historique complet des véhicules, trié par Date_Effet décroissante puis Id décroissant.
Task> GetHistoriqueAsync(CancellationToken cancellationToken = default);
/// Retourne le véhicule par identifiant, ou null s'il n'existe pas.
Task GetByIdAsync(int id, CancellationToken cancellationToken = default);
///
/// Résout le véhicule courant à une date donnée : Date_Effet la plus récente parmi
/// celles <= (ORDER BY DateEffet DESC, Id DESC LIMIT 1).
/// Retourne null si aucun véhicule n'a de Date_Effet <= .
///
Task GetVehiculeCourantAsync(DateOnly date, CancellationToken cancellationToken = default);
/// Ajoute un nouveau véhicule (sans persister). L'appelant gère la transaction.
Task AddAsync(Vehicule vehicule, CancellationToken cancellationToken = default);
///
/// Retourne les trajets dont la Date est >= et dont la
/// PuissanceFiscale diffère de (candidats à la réaffectation).
///
Task> GetTrajetsAReaffecterAsync(
DateOnly dateEffet,
int puissanceFiscale,
CancellationToken cancellationToken = default);
}