// fuel_admin_controller.dart — تحكم شاشات محفظة الوقود (لوحة إدارة سيرو) import 'package:get/get.dart'; import 'fuel_admin_models.dart'; import 'fuel_admin_service.dart'; class FuelAdminController extends GetxController { bool isLoading = false; List stations = []; /// ‏حالة المنتج — لا حالة الشاشة. الشاشة تعمل دائماً؛ المنتج قد يكون /// ‏مُجهَّزاً وغير مُشغَّل حتى يتم الاتفاق مع سلسلة المحطات. bool productActive = false; String searchQuery = ''; bool isSaving = false; bool isLoadingDrawdowns = false; FuelDrawdownsPage? drawdowns; String? lastError; @override void onInit() { super.onInit(); fetchStations(); } Future fetchStations() async { isLoading = true; update(); final res = await FuelAdminService.listStations(search: searchQuery); if (res.success && res.data != null) { stations = res.data!.stations; productActive = res.data!.productActive; lastError = null; } else { lastError = res.message; } isLoading = false; update(); } /// ‏يُرجع المفتاح الجديد عند الإنشاء، أو null عند التعديل/الفشل. /// /// ‏المفتاح يظهر مرة واحدة فقط — مخزَّن مُهشَّراً على الخادم ولا سبيل /// ‏لاستعادته. الشاشة مسؤولة عن عرضه فوراً قبل أي انتقال. Future saveStation({ int? stationId, required String nameAr, String? chainName, String? city, String? address, double? lat, double? lng, String? phone, required double discountPercent, required bool isActive, }) async { isSaving = true; update(); final res = await FuelAdminService.saveStation( stationId: stationId, nameAr: nameAr, chainName: chainName, city: city, address: address, lat: lat, lng: lng, phone: phone, discountPercent: discountPercent, isActive: isActive, ); isSaving = false; lastError = res.success ? null : res.message; update(); if (!res.success) return null; await fetchStations(); return res.data?['api_key']?.toString(); } Future rotateKey(int stationId) async { final res = await FuelAdminService.rotateKey(stationId); if (!res.success) { lastError = res.message; update(); return null; } return res.data?['api_key']?.toString(); } /// ‏تشغيل المنتج أو إيقافه. الخادم يرفض التشغيل بلا محطة فعّالة واحدة — /// ‏سائق يفعّل محفظته ثم لا يجد أين يصرف قسيمته تجربةٌ تُفقد الثقة. Future toggleProduct(bool value) async { final res = await FuelAdminService.toggleProduct(value); if (res.success) { productActive = res.data ?? value; lastError = null; update(); return true; } lastError = res.message; update(); return false; } Future fetchDrawdowns({int? stationId, String? status}) async { isLoadingDrawdowns = true; update(); final res = await FuelAdminService.listDrawdowns(stationId: stationId, status: status); if (res.success) { drawdowns = res.data; lastError = null; } else { lastError = res.message; } isLoadingDrawdowns = false; update(); } }