import 'package:dio/dio.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import '../core/cache_manager.dart'; class ApiClient { late final Dio dio; ApiClient() { dio = Dio(BaseOptions( baseUrl: dotenv.env['API_BASE_URL'] ?? 'http://10.0.2.2:8000/api', connectTimeout: const Duration(seconds: 30), receiveTimeout: const Duration(seconds: 30), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, )); dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) async { final token = CacheManager.authBox.get('auth_token'); if (token != null && token.isNotEmpty) { options.headers['Authorization'] = 'Bearer $token'; } print('[API Request] ${options.method} ${options.path}'); print('[API Headers] ${options.headers}'); return handler.next(options); }, onResponse: (response, handler) { print('[API Response] ${response.statusCode} ${response.requestOptions.path}'); return handler.next(response); }, onError: (DioException e, handler) { String errorMessage = 'Terjadi kesalahan'; if (e.response != null) { print('[API Error] ${e.response?.statusCode} ${e.requestOptions.path}'); print('[API Error Data] ${e.response?.data}'); if (e.response!.data is Map && e.response!.data['message'] != null) { errorMessage = e.response!.data['message']; } } else { print('[API Error] Network error: ${e.message}'); errorMessage = 'Koneksi gagal. Periksa internet Anda.'; } print('[API Error Message] $errorMessage'); return handler.next(e); }, )); } }