/// Interface du repository des membres (Clean Architecture)
library membre_repository_interface;

import '../../data/models/membre_complete_model.dart';
import '../../../../shared/models/membre_search_result.dart';
import '../../../../shared/models/membre_search_criteria.dart';

/// Interface définissant le contrat du repository des membres
/// Implémentée par MembreRepositoryImpl dans la couche data
abstract class IMembreRepository {
  /// Récupère la liste des membres avec pagination
  Future<MembreSearchResult> getMembres({
    int page = 0,
    int size = 20,
    String? recherche,
  });

  /// Récupère un membre par son ID
  Future<MembreCompletModel?> getMembreById(String id);

  /// Crée un nouveau membre
  Future<MembreCompletModel> createMembre(MembreCompletModel membre);

  /// Met à jour un membre
  Future<MembreCompletModel> updateMembre(String id, MembreCompletModel membre);

  /// Supprime un membre
  Future<void> deleteMembre(String id);

  /// Active un membre
  Future<MembreCompletModel> activateMembre(String id);

  /// Désactive un membre
  Future<MembreCompletModel> deactivateMembre(String id);

  /// Recherche avancée de membres
  Future<MembreSearchResult> searchMembres({
    required MembreSearchCriteria criteria,
    int page = 0,
    int size = 20,
  });

  /// Récupère les membres actifs
  Future<MembreSearchResult> getActiveMembers({int page = 0, int size = 20});

  /// Récupère les membres du bureau
  Future<MembreSearchResult> getBureauMembers({int page = 0, int size = 20});

  /// Récupère les statistiques des membres
  Future<Map<String, dynamic>> getMembresStats();
}
