import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import '../controller/firebase/local_notification.dart'; class RideLiveNotification { static const int _notificationId = 888; // رقم ثابت لإشعار الرحلة // نستخدم نفس الـ plugin من NotificationController static FlutterLocalNotificationsPlugin get _plugin => Get.find().plugin; // static bool _initialized = false; static Future _showOrUpdate({ required String title, required String body, required int progress, required int maxProgress, bool indeterminate = false, }) async { // await init(); final android = AndroidNotificationDetails( 'live_ride_tracking', // channel id 'Ride Tracking', // channel name channelDescription: 'Live updates for the current Intaleq ride', importance: Importance.max, priority: Priority.high, ongoing: true, // إشعار ثابت autoCancel: false, showProgress: true, onlyAlertOnce: true, maxProgress: maxProgress, progress: progress, indeterminate: indeterminate, icon: '@mipmap/launcher_icon', // غيّرها لو عندك أيقونة أخرى ); final details = NotificationDetails(android: android); await _plugin.show( id: _notificationId, title: title, body: body, notificationDetails: details, ); } /// إلغاء إشعار الرحلة static Future cancel() async { // await init(); await _plugin.cancel(id: _notificationId); } // ========= حالات جاهزة للحالات المختلفة ========= /// حالة البحث عن سائق static Future showSearching(String statusText) async { await _showOrUpdate( title: 'جاري البحث عن سائق…', body: statusText, progress: 0, maxProgress: 0, indeterminate: true, // شريط متحرّك بدون نسبة ); } /// السائق في الطريق للراكب static Future showDriverOnWay({ required String driverName, required String etaText, // مثل: "8 دقائق" String? carInfo, // مثل: "هيونداي • أبيض • ABC-123" }) async { final info = [ driverName, if (carInfo != null && carInfo.isNotEmpty) carInfo, etaText, ].join(' • '); await _showOrUpdate( title: 'السائق في الطريق إليك', body: info, progress: 0, maxProgress: 0, indeterminate: true, ); } /// السائق وصل لموقع الراكب static Future showDriverArrived(String driverName) async { await _showOrUpdate( title: 'السائق وصل', body: 'الرجاء التوجّه لمقابلة $driverName عند نقطة الالتقاء', progress: 100, maxProgress: 100, indeterminate: false, ); } /// الرحلة جارية (Progress حقيقي) static Future showTripInProgress({ required int percentage, // من 0 إلى 100 required String etaText, // "8 دقائق" مثلاً }) async { final safePercent = percentage.clamp(0, 100); await _showOrUpdate( title: 'الرحلة جارية الآن', body: 'المتبقي تقريبًا: $etaText', progress: safePercent, maxProgress: 100, indeterminate: false, ); } }