import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:p_tits_pas/models/couple_garde.dart'; import 'package:p_tits_pas/services/api/api_config.dart'; import 'package:p_tits_pas/services/api/tokenService.dart'; /// Accès API aux couples de garde du parent connecté — tickets #167 / #168. /// - GET /parents/me/couples-garde /// - PUT /parents/me/couples-garde/courant { couple_id } class CoupleGardeService { static Future> _headers() async { final token = await TokenService.getToken(); return token != null ? ApiConfig.authHeaders(token) : Map.from(ApiConfig.headers); } static String _extractError(String body, String fallback) { try { final decoded = jsonDecode(body); if (decoded is Map) { final message = decoded['message']; if (message is String && message.trim().isNotEmpty) { return message; } if (message is Map && message['message'] is String) { return message['message'] as String; } } } catch (_) {} return fallback; } /// Liste les couples de garde et le couple courant du parent connecté. static Future getCouplesGarde() async { final response = await http.get( Uri.parse('${ApiConfig.baseUrl}${ApiConfig.parentsCouplesGarde}'), headers: await _headers(), ); if (response.statusCode != 200) { throw Exception( _extractError(response.body, 'Erreur chargement des couples de garde'), ); } final decoded = jsonDecode(response.body); return CouplesGardeResponse.fromJson( Map.from(decoded as Map), ); } /// Persiste le couple courant (préférence utilisateur) et renvoie la liste /// à jour. static Future definirCoupleCourant( String coupleId, ) async { final response = await http.put( Uri.parse('${ApiConfig.baseUrl}${ApiConfig.parentsCoupleGardeCourant}'), headers: await _headers(), body: jsonEncode({'couple_id': coupleId}), ); if (response.statusCode != 200) { throw Exception( _extractError(response.body, 'Erreur sélection du couple de garde'), ); } final decoded = jsonDecode(response.body); return CouplesGardeResponse.fromJson( Map.from(decoded as Map), ); } }