import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:p_tits_pas/services/api/api_config.dart'; import 'package:p_tits_pas/services/api/tokenService.dart'; import 'package:http/http.dart' as http; class UserService { final String baseUrl = ApiConfig.baseUrl; //Recuperer tous les utilisateurs Future>> getAllUsers() async { try { final token = await TokenService.getToken(); if (token == null) { throw Exception('Token non disponible'); } final response = await http.get( Uri.parse('$baseUrl${ApiConfig.users}'), headers: ApiConfig.authHeaders(token), ); if (response.statusCode == 200) { final List data = jsonDecode(response.body); return data.cast>(); } else { throw Exception('Erreur lors de la récupération des utilisateurs: ${response.statusCode}'); } } catch (e) { throw Exception('Erreur de connexion: $e'); } } //Récuperer les utilisateurs en fonction du role Future>> getUsersByRole(String role) async { try { final allUsers = await getAllUsers(); return allUsers.where((user) => user['role']?.toString().toLowerCase() == role.toLowerCase() ).toList(); } catch (e) { throw Exception('Erreur lors de la récupération des utilisateurs par rôle: $e'); } } // Filtrer les utilisateurs par statut Future>> filterUsersByStatus(String? status) async { try { final allUsers = await getAllUsers(); if (status == null || status.isEmpty) return allUsers; return allUsers .where((user) => user['status']?.toString().toLowerCase() == status.toLowerCase()) .toList(); } catch (e) { throw Exception('Erreur lors du filtrage: $e'); } } /// Supprimer un utilisateur Future deleteUser(String userId) async { try { final token = await TokenService.getToken(); if (token == null) { throw Exception('Token non disponible'); } final response = await http.delete( Uri.parse('$baseUrl${ApiConfig.users}/$userId'), headers: ApiConfig.authHeaders(token), ); return response.statusCode == 200 || response.statusCode == 204; } catch (e) { throw Exception('Erreur lors de la suppression: $e'); } } /// Récupérer les détails d'un utilisateur Future?> getUserById(String userId) async { try { final token = await TokenService.getToken(); if (token == null) { throw Exception('Token non disponible'); } final response = await http.get( Uri.parse('$baseUrl${ApiConfig.users}/$userId'), headers: ApiConfig.authHeaders(token), ); if (response.statusCode == 200) { return jsonDecode(response.body); } else { return null; } } catch (e) { throw Exception('Erreur lors de la récupération de l\'utilisateur: $e'); } } }