import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:em2rp/models/user_model.dart'; import 'package:em2rp/services/data_service.dart'; import 'package:em2rp/services/api_service.dart'; class UsersProvider with ChangeNotifier { final DataService _dataService = DataService(FirebaseFunctionsApiService()); List _users = []; bool _isLoading = false; List get users => _users; bool get isLoading => _isLoading; /// Récupération de tous les utilisateurs via l'API Future fetchUsers() async { _isLoading = true; notifyListeners(); try { final usersData = await _dataService.getUsers(); _users = usersData.map((data) { return UserModel.fromMap(data, data['id'] as String); }).toList(); } catch (e) { print('Error fetching users: $e'); _users = []; } _isLoading = false; notifyListeners(); } /// Recharger les utilisateurs Future refresh() async { await fetchUsers(); } /// Obtenir un utilisateur par ID UserModel? getUserById(String uid) { try { return _users.firstWhere((u) => u.uid == uid); } catch (e) { return null; } } /// Mettre à jour un utilisateur Future updateUser(UserModel user) async { try { await _dataService.updateUser(user.uid, user.toMap()); final index = _users.indexWhere((u) => u.uid == user.uid); if (index != -1) { _users[index] = user; notifyListeners(); } } catch (e) { print('Error updating user: $e'); rethrow; } } /// Suppression d'un utilisateur via Cloud Function Future deleteUser(String uid) async { try { await _dataService.deleteUser(uid); _users.removeWhere((user) => user.uid == uid); notifyListeners(); } catch (e) { print('Error deleting user: $e'); rethrow; } } /// Créer un utilisateur avec invitation par email Future createUserWithEmailInvite({ required String email, required String firstName, required String lastName, String? phoneNumber, required String roleId, }) async { try { print('Creating user with email invite: $email'); // Appeler la Cloud Function pour créer l'utilisateur await _dataService.createUserWithInvite( email: email, firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, roleId: roleId, ); // Recharger la liste des utilisateurs await fetchUsers(); print('User created successfully: $email'); } catch (e) { print('Error creating user with email invite: $e'); rethrow; } } /// Réinitialisation du mot de passe Future resetPassword(String email) async { try { // Firebase Auth reste OK (ce n'est pas Firestore) await FirebaseAuth.instance.sendPasswordResetEmail(email: email); print('Email de réinitialisation envoyé à $email'); } catch (e) { print('Error reset password: $e'); rethrow; } } }