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'; /// إدارة المطاعم (وحدة الطعام). /// الباك إند كان جاهزاً بالكامل في backend/food/admin/ منذ البداية /// (merchants / merchant_approve / payouts) دون أي واجهة في اللوحة. class FoodMerchantsController extends GetxController { bool isLoading = true; List merchants = []; String filter = 'all'; /// المطعم قيد المعالجة — لتعطيل أزراره أثناء الطلب int? busyId; /// الحالات كما تقبلها backend/food/admin/merchants.php حرفياً static const statuses = { 'all': 'الكل', 'pending_approval': 'بانتظار الاعتماد', 'active': 'نشط', 'paused': 'موقوف مؤقتاً', 'suspended': 'معلّق', 'rejected': 'مرفوض', }; @override void onInit() { super.onInit(); fetchMerchants(); } Future changeFilter(String next) async { if (filter == next) return; filter = next; await fetchMerchants(); } Future fetchMerchants() async { isLoading = true; update(); try { var res = await CRUD() .post(link: AppLink.foodMerchants, payload: {'status': filter}); if (res != 'failure' && res != null) { var d = res is String ? jsonDecode(res) : res; if (d['status'] == 'success') { // jsonSuccess يغلّف الحمولة في message لا data final payload = d['message'] ?? d['data']; if (payload is Map && payload['merchants'] is List) { merchants = payload['merchants']; } else { merchants = []; } } else { mySnackbarError('${d['message'] ?? 'تعذّر جلب المطاعم'}'); } } } catch (e) { Log.print('Error fetching merchants: $e'); mySnackbarError('$e'); } isLoading = false; update(); } /// approve أو reject — الخادم يقبلهما فقط لمطعم بحالة pending_approval. Future decide(int merchantId, String action) async { busyId = merchantId; update(); try { var res = await CRUD().post( link: AppLink.foodMerchantApprove, payload: { 'merchant_id': merchantId.toString(), 'action': action, }, ); if (res != 'failure' && res != null) { var d = res is String ? jsonDecode(res) : res; if (d['status'] == 'success') { mySnackbarSuccess( action == 'approve' ? 'تم اعتماد المطعم' : 'تم رفض المطعم'); busyId = null; await fetchMerchants(); return; } mySnackbarError('${d['message'] ?? 'تعذّر تنفيذ الإجراء'}'); } } catch (e) { Log.print('Error deciding merchant: $e'); mySnackbarError('$e'); } busyId = null; update(); } }