import 'package:dio/dio.dart'; /// Helpers pour parser les réponses JSON de l'API Laverie (`success` + `data`). abstract final class ApiResponse { static Map payload(dynamic data) { if (data is Map) { if (data['data'] is Map) { return data['data'] as Map; } return data; } throw StateError('Réponse API inattendue'); } static List list(dynamic data, String key) { final value = payload(data)[key]; if (value is List) { return value; } return []; } static Map object(dynamic data, String key) { final value = payload(data)[key]; if (value is Map) { return value; } throw StateError('Champ API "$key" introuvable ou invalide'); } static String errorMessage(DioException error, {String fallback = 'Erreur réseau'}) { final response = error.response; if (response?.data is Map) { final data = response!.data as Map; final message = data['message']; if (message is String && message.isNotEmpty) { return _sanitize(message); } } return switch (error.type) { DioExceptionType.connectionTimeout || DioExceptionType.sendTimeout || DioExceptionType.receiveTimeout => 'Délai d\'attente dépassé', DioExceptionType.connectionError => 'Connexion impossible', _ => fallback, }; } /// Masque les détails SQL techniques pour l'utilisateur. static String _sanitize(String message) { if (message.contains('SQLSTATE') || message.contains('SQL:') || message.contains('must be of type')) { return 'Erreur serveur — réessayez dans un instant'; } return message; } }