/// Use case: Exporter la liste des membres
library export_members;

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

/// Use case pour exporter la liste des membres au format CSV ou PDF
/// Réservé aux utilisateurs avec le rôle ADMIN_ORGANISATION
@injectable
class ExportMembers {
  final IMembreRepository _repository;

  ExportMembers(this._repository);

  /// Exécute le use case
  ///
  /// [criteria] - Critères de filtre pour l'export (optionnel)
  /// [format] - Format d'export ('csv' ou 'pdf')
  ///
  /// Retourne les données exportées (liste complète des membres selon critères)
  /// Note: Backend endpoint GET /api/membres/export?format=csv|excel|pdf disponible
  /// Le use case actuel récupère toutes les données, l'export final se fait côté UI
  Future<List<Map<String, dynamic>>> call({
    MembreSearchCriteria? criteria,
    String format = 'csv',
  }) async {
    // Récupérer tous les membres (pagination large)
    final result = await _repository.searchMembres(
      criteria: criteria ?? const MembreSearchCriteria(),
      page: 0,
      size: 10000, // Grande pagination pour export complet
    );

    // Convertir en liste de maps pour l'export
    return result.membres.map((membre) => {
      'id': membre.id,
      'nom': membre.nom,
      'prenom': membre.prenom,
      'email': membre.email,
      'telephone': membre.telephone,
      'adresse': membre.adresse,
      'dateNaissance': membre.dateNaissance?.toIso8601String(),
      'dateAdhesion': membre.dateAdhesion?.toIso8601String(),
      'statut': membre.statut,
      'actif': membre.actif,
    }).toList();
  }
}
