import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/models/parent_model.dart'; import 'package:p_tits_pas/models/assistante_maternelle_model.dart'; import 'package:p_tits_pas/services/api/api_config.dart'; import 'package:p_tits_pas/services/api/tokenService.dart'; class UserService { static Future> _headers() async { final token = await TokenService.getToken(); return token != null ? ApiConfig.authHeaders(token) : Map.from(ApiConfig.headers); } static String? _toStr(dynamic v) { if (v == null) return null; if (v is String) return v; return v.toString(); } // Récupérer la liste des gestionnaires static Future> getGestionnaires() async { // Note: L'endpoint /gestionnaires n'est pas activé dans le backend actuel. // On utilise donc /users et on filtre par rôle. final response = await http.get( Uri.parse('${ApiConfig.baseUrl}${ApiConfig.users}'), headers: await _headers(), ); if (response.statusCode != 200) { final err = jsonDecode(response.body) as Map?; throw Exception(_toStr(err?['message']) ?? 'Erreur chargement gestionnaires'); } final List data = jsonDecode(response.body); return data .map((e) => AppUser.fromJson(e)) .where((u) => u.role == 'gestionnaire') .toList(); } // Récupérer la liste des parents static Future> getParents() async { final response = await http.get( Uri.parse('${ApiConfig.baseUrl}${ApiConfig.parents}'), headers: await _headers(), ); if (response.statusCode != 200) { final err = jsonDecode(response.body) as Map?; throw Exception(_toStr(err?['message']) ?? 'Erreur chargement parents'); } final List data = jsonDecode(response.body); return data.map((e) => ParentModel.fromJson(e)).toList(); } // Récupérer la liste des assistantes maternelles static Future> getAssistantesMaternelles() async { final response = await http.get( Uri.parse('${ApiConfig.baseUrl}${ApiConfig.assistantesMaternelles}'), headers: await _headers(), ); if (response.statusCode != 200) { final err = jsonDecode(response.body) as Map?; throw Exception(_toStr(err?['message']) ?? 'Erreur chargement AM'); } final List data = jsonDecode(response.body); return data.map((e) => AssistanteMaternelleModel.fromJson(e)).toList(); } // Récupérer la liste des administrateurs (via /users filtré ou autre) // Pour l'instant on va utiliser /users et filtrer côté client si on est super admin static Future> getAdministrateurs() async { // TODO: Endpoint dédié ou filtrage // En attendant, on retourne une liste vide ou on tente /users try { final response = await http.get( Uri.parse('${ApiConfig.baseUrl}${ApiConfig.users}'), headers: await _headers(), ); if (response.statusCode == 200) { final List data = jsonDecode(response.body); return data .map((e) => AppUser.fromJson(e)) .where((u) => u.role == 'administrateur' || u.role == 'super_admin') .toList(); } } catch (e) { print('Erreur chargement admins: $e'); } return []; } }