/// Interface du repository des contributions (Clean Architecture) library contribution_repository_interface; import '../../data/models/contribution_model.dart'; import '../../data/repositories/contribution_repository.dart' show ContributionPageResult, WavePaiementInitResult; /// Interface définissant le contrat du repository des contributions /// Implémentée par ContributionRepositoryImpl dans la couche data abstract class IContributionRepository { /// Récupère toutes les cotisations du membre connecté Future getMesCotisations({int page = 0, int size = 50}); /// Récupère une cotisation par ID Future getCotisationById(String id); /// Crée une nouvelle cotisation Future createCotisation(ContributionModel contribution); /// Met à jour une cotisation existante Future updateCotisation(String id, ContributionModel contribution); /// Supprime une cotisation Future deleteCotisation(String id); /// Enregistre un paiement pour une cotisation Future enregistrerPaiement( String cotisationId, { required double montant, required DateTime datePaiement, required String methodePaiement, String? numeroPaiement, String? referencePaiement, }); /// Initie un paiement en ligne (Wave) Future initierPaiementEnLigne({ required String cotisationId, required String methodePaiement, required String numeroTelephone, }); /// Récupère la synthèse des cotisations du membre Future?> getMesCotisationsSynthese(); /// Récupère les statistiques globales Future> getStatistiques(); /// Récupère les cotisations en attente Future getMesCotisationsEnAttente(); /// Récupère les cotisations avec filtres (admin) Future getCotisations({ int page = 0, int size = 20, String? membreId, String? statut, String? type, int? annee, }); /// Envoie un rappel de paiement Future envoyerRappel(String cotisationId); /// Génère les cotisations annuelles pour tous les membres Future genererCotisationsAnnuelles(int annee); }