/// Use case: Recherche avancée de membres
library search_members;

import 'package:injectable/injectable.dart';
import '../../../../shared/models/membre_search_result.dart';
import '../../../../shared/models/membre_search_criteria.dart';
import '../repositories/membre_repository.dart';

/// Use case pour effectuer une recherche avancée de membres
/// avec critères multiples (nom, email, téléphone, statut, rôle, organisation, etc.)
@injectable
class SearchMembers {
  final IMembreRepository _repository;

  SearchMembers(this._repository);

  /// Exécute le use case
  ///
  /// [criteria] - Critères de recherche avancée
  /// [page] - Numéro de page (pagination)
  /// [size] - Taille de la page
  ///
  /// Retourne la liste paginée des membres correspondant aux critères
  Future<MembreSearchResult> call({
    required MembreSearchCriteria criteria,
    int page = 0,
    int size = 20,
  }) async {
    return _repository.searchMembres(
      criteria: criteria,
      page: page,
      size: size,
    );
  }
}
