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<NotificationController>().plugin;
  // static bool _initialized = false;

  static Future<void> _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<void> cancel() async {
    // await init();
    await _plugin.cancel(id: _notificationId);
  }

  // ========= حالات جاهزة للحالات المختلفة =========

  /// حالة البحث عن سائق
  static Future<void> showSearching(String statusText) async {
    await _showOrUpdate(
      title: 'جاري البحث عن سائق…',
      body: statusText,
      progress: 0,
      maxProgress: 0,
      indeterminate: true, // شريط متحرّك بدون نسبة
    );
  }

  /// السائق في الطريق للراكب
  static Future<void> 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<void> showDriverArrived(String driverName) async {
    await _showOrUpdate(
      title: 'السائق وصل',
      body: 'الرجاء التوجّه لمقابلة $driverName عند نقطة الالتقاء',
      progress: 100,
      maxProgress: 100,
      indeterminate: false,
    );
  }

  /// الرحلة جارية (Progress حقيقي)
  static Future<void> 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,
    );
  }
}
