import 'package:em2rp/services/api_service.dart'; /// Repository pour gérer toutes les opérations sur les utilisateurs et les rôles. class UserRepository { final ApiService _apiService; UserRepository(this._apiService); /// Récupère l'utilisateur actuellement authentifié avec son rôle Future> getCurrentUser() async { try { print('[UserRepository] Calling getCurrentUser API...'); final result = await _apiService.call('getCurrentUser', {}); print('[UserRepository] Current user loaded successfully'); return result['user'] as Map; } catch (e) { print('[UserRepository] Error getting current user: $e'); throw Exception( 'Erreur lors de la récupération de l\'utilisateur actuel: $e'); } } /// Récupère tous les utilisateurs (selon permissions) Future>> getUsers() async { try { final result = await _apiService.call('getUsers', {}); final users = result['users'] as List?; if (users == null) return []; return users.map((e) => e as Map).toList(); } catch (e) { throw Exception('Erreur lors de la récupération des utilisateurs: $e'); } } /// Récupère un utilisateur spécifique Future> getUser(String userId) async { try { final result = await _apiService.call('getUser', {'userId': userId}); return result['user'] as Map; } catch (e) { throw Exception('Erreur lors de la récupération de l\'utilisateur: $e'); } } /// Supprime un utilisateur (Auth + Firestore) Future deleteUser(String userId) async { try { await _apiService.call('deleteUser', {'userId': userId}); } catch (e) { throw Exception('Erreur lors de la suppression de l\'utilisateur: $e'); } } /// Met à jour un utilisateur Future updateUser(String userId, Map data) async { try { await _apiService.call('updateUser', { 'userId': userId, 'data': data, }); } catch (e) { throw Exception('Erreur lors de la mise à jour de l\'utilisateur: $e'); } } /// Crée un utilisateur avec invitation par email Future> createUserWithInvite({ required String email, required String firstName, required String lastName, String? phoneNumber, required String roleId, }) async { try { final result = await _apiService.call('createUserWithInvite', { 'email': email, 'firstName': firstName, 'lastName': lastName, 'phoneNumber': phoneNumber ?? '', 'roleId': roleId, }); return result; } catch (e) { throw Exception('Erreur lors de la création de l\'utilisateur: $e'); } } /// Récupère tous les rôles Future>> getRoles() async { try { final result = await _apiService.call('getRoles', {}); final roles = result['roles'] as List?; if (roles == null) return []; return roles.map((e) => e as Map).toList(); } catch (e) { throw Exception('Erreur lors de la récupération des rôles: $e'); } } }