import '../core/api_client.dart'; class WalletService { final ApiClient _api; WalletService(this._api); Future> getOverview({required int businessId}) async { final res = await _api.get>('/businesses/$businessId/wallet'); final body = res.data as Map; return Map.from(body['data'] as Map); } Future>> listTransactions({ required int businessId, int skip = 0, int limit = 50, DateTime? fromDate, DateTime? toDate, }) async { final query = { 'skip': '$skip', 'limit': '$limit', if (fromDate != null) 'from_date': fromDate.toIso8601String(), if (toDate != null) 'to_date': toDate.toIso8601String(), }; final res = await _api.get>('/businesses/$businessId/wallet/transactions', query: query); final body = res.data; final items = (body is Map) ? body['data'] : body; if (items is List) { return items.map>((e) => Map.from(e as Map)).toList(); } return const >[]; } Future> getMetrics({ required int businessId, DateTime? fromDate, DateTime? toDate, }) async { final query = { if (fromDate != null) 'from_date': fromDate.toIso8601String(), if (toDate != null) 'to_date': toDate.toIso8601String(), }; final res = await _api.get>('/businesses/$businessId/wallet/metrics', query: query); final body = res.data as Map; return Map.from(body['data'] as Map); } Future> requestPayout({ required int businessId, required int bankAccountId, required double amount, String? description, }) async { final res = await _api.post>('/businesses/$businessId/wallet/payouts', data: { 'bank_account_id': bankAccountId, 'amount': amount, if (description != null && description.isNotEmpty) 'description': description, }); final body = res.data as Map; return Map.from(body['data'] as Map); } Future> topUp({ required int businessId, required double amount, String? description, int? gatewayId, }) async { final res = await _api.post>('/businesses/$businessId/wallet/top-up', data: { 'amount': amount, if (description != null && description.isNotEmpty) 'description': description, if (gatewayId != null) 'gateway_id': gatewayId, }); final body = res.data as Map; return Map.from(body['data'] as Map); } }