import 'dart:convert'; import 'package:get/get.dart'; import 'package:siro_admin/constant/links.dart'; import 'package:siro_admin/controller/functions/crud.dart'; import 'package:siro_admin/views/widgets/snackbar.dart'; import '../../print.dart'; /// طلبات سحب أرصدة السائقين (جدول driver_withdrawal_requests على خادم /// المدفوعات). لم تكن لها واجهة إطلاقاً قبل هذا: السائق يرسل الطلب فيُخزَّن /// وتُرسل رسالة واتساب لحظية، ثم لا يقرأ الجدول أحد. class WithdrawalController extends GetxController { bool isLoading = true; List requests = []; Map totals = {}; String filter = 'pending'; /// المعرّف قيد المعالجة — لتعطيل أزرار الصف أثناء الطلب ومنع النقر المزدوج int? busyId; @override void onInit() { super.onInit(); fetchRequests(); } Future changeFilter(String next) async { if (filter == next) return; filter = next; await fetchRequests(); } Future fetchRequests() async { isLoading = true; update(); try { var res = await CRUD().getWallet( link: AppLink.withdrawalRequests, payload: {'action': 'list', 'status': filter}, ); if (res != 'failure' && res != null) { var d = res is String ? jsonDecode(res) : res; if (d['status'] == 'success' && d['data'] is Map) { requests = d['data']['requests'] ?? []; totals = Map.from(d['data']['totals'] ?? {}); } else { mySnackbarError('${d['message'] ?? 'تعذّر جلب طلبات السحب'}'); } } } catch (e) { Log.print('Error fetching withdrawal requests: $e'); mySnackbarError('$e'); } isLoading = false; update(); } /// تغيير الحالة يتطلّب super_admin على الخادم؛ الخادم يرفض أيضاً أي انتقال /// غير مسموح (مثل إعادة فتح طلب مرفوض) بـ 409، فنعرض رسالته كما هي. Future updateStatus(int id, String status) async { busyId = id; update(); try { var res = await CRUD().getWallet( link: AppLink.withdrawalRequests, payload: { 'action': 'update_status', 'id': id.toString(), 'status': status, }, ); if (res != 'failure' && res != null) { var d = res is String ? jsonDecode(res) : res; if (d['status'] == 'success') { mySnackbarSuccess('تم تحديث حالة الطلب'); busyId = null; await fetchRequests(); return; } mySnackbarError('${d['message'] ?? 'تعذّر تحديث الحالة'}'); } } catch (e) { Log.print('Error updating withdrawal status: $e'); mySnackbarError('$e'); } busyId = null; update(); } }