// transit_driver_controller.dart — تحكم وضع الباص (جهة السائق) import 'package:get/get.dart'; import 'package:intaleq_maps/intaleq_maps.dart' show LatLng; import '../functions/location_controller.dart'; import 'transit_driver_models.dart'; import 'transit_driver_service.dart'; class TransitDriverController extends GetxController { bool isCheckingBusDriver = true; bool isBusDriver = false; int? driverTransitId; String orgName = ''; bool isLoadingTrips = false; List todayTrips = []; TransitDriverTrip? activeTrip; bool isActionInProgress = false; @override void onInit() { super.onInit(); checkBusDriverStatus(); } Future checkBusDriverStatus() async { isCheckingBusDriver = true; update(); final res = await TransitDriverService.checkIsBusDriver(); if (res.success && res.data != null) { isBusDriver = res.data!['is_bus_driver'] == true; if (isBusDriver) { driverTransitId = int.tryParse(res.data!['driver_transit_id'].toString()); orgName = res.data!['org_name']?.toString() ?? ''; await fetchTodayTrips(); } } isCheckingBusDriver = false; update(); } Future fetchTodayTrips() async { if (driverTransitId == null) return; isLoadingTrips = true; update(); final res = await TransitDriverService.getTodayTrips(driverTransitId!); if (res.success) { todayTrips = res.data ?? []; final started = todayTrips.where((t) => t.status == 'started'); activeTrip = started.isNotEmpty ? started.first : null; // إن كانت هناك رحلة قيد التشغيل بالفعل (مثلاً بعد إعادة فتح التطبيق)، فعّل وضع الباص if (activeTrip != null && Get.isRegistered()) { Get.find().setBusMode( enabled: true, tripId: activeTrip!.id, routeId: activeTrip!.routeId, ); } } isLoadingTrips = false; update(); } Future startTrip(TransitDriverTrip trip) async { if (driverTransitId == null || isActionInProgress) return false; isActionInProgress = true; update(); LatLng pos = const LatLng(0, 0); if (Get.isRegistered()) { pos = Get.find().myLocation; } final res = await TransitDriverService.startTrip( tripId: trip.id, driverTransitId: driverTransitId!, lat: pos.latitude, lng: pos.longitude, ); if (res.success) { if (Get.isRegistered()) { Get.find().setBusMode( enabled: true, tripId: trip.id, routeId: trip.routeId, ); } await fetchTodayTrips(); } else { Get.snackbar('مواصلاتي', res.message); } isActionInProgress = false; update(); return res.success; } Future endTrip(TransitDriverTrip trip) async { if (driverTransitId == null || isActionInProgress) return false; isActionInProgress = true; update(); final res = await TransitDriverService.endTrip( tripId: trip.id, driverTransitId: driverTransitId!, ); if (res.success) { if (Get.isRegistered()) { Get.find().setBusMode(enabled: false); } await fetchTodayTrips(); } else { Get.snackbar('مواصلاتي', res.message); } isActionInProgress = false; update(); return res.success; } Future reportDelay(TransitDriverTrip trip, int minutes, {String? reason}) async { if (driverTransitId == null) return false; final res = await TransitDriverService.reportDelay( tripId: trip.id, driverTransitId: driverTransitId!, delayMinutes: minutes, reason: reason, ); if (!res.success) Get.snackbar('مواصلاتي', res.message); return res.success; } }