import 'dart:io';

import 'package:device_info_plus/device_info_plus.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_navigation/src/extension_navigation.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:siro_driver/views/widgets/error_snakbar.dart';
import 'package:siro_driver/views/widgets/mydialoug.dart';

import 'background_service.dart';

Future<void> requestNotificationPermission() async {
  if (Platform.isAndroid) {
    final androidInfo = await DeviceInfoPlugin().androidInfo;
    if (androidInfo.version.sdkInt >= 33) {
      // Android 13+
      final status = await Permission.notification.request();
      if (!status.isGranted) {
        print('⚠️ إذن الإشعارات مرفوض');
        return;
      }
    }
  }

  // بعد الحصول على الإذن، ابدأ الخدمة
  await BackgroundServiceHelper.startService();
}

class PermissionsHelper {
  /// طلب إذن الإشعارات على Android 13+
  static Future<bool> requestNotificationPermission() async {
    if (Platform.isAndroid) {
      final androidInfo = await DeviceInfoPlugin().androidInfo;

      if (androidInfo.version.sdkInt >= 33) {
        final status = await Permission.notification.request();

        if (status.isDenied) {
          print('⚠️ إذن الإشعارات مرفوض');
          mySnackbarWarning(
              "يرجى منح صلاحية الإشعارات لضمان وصول الطلبات إليك");
          return false;
        }

        if (status.isPermanentlyDenied) {
          print('⚠️ إذن الإشعارات مرفوض بشكل دائم - افتح الإعدادات');
          mySnackbarWarning('يرجى فتح الإعدادات وتفعيل صلاحية الإشعارات');
          return false;
        }
      }
    }

    return true;
  }

  /// طلب جميع الإذونات المطلوبة
  static Future<bool> requestAllPermissions() async {
    // إذن الإشعارات (اختياري)
    await requestNotificationPermission();

    // 1. طلب إذن الموقع الأساسي فقط إذا كان مرفوضاً
    var status = await Permission.location.status;
    if (status.isDenied) {
      status = await Permission.location.request();
    }

    if (status.isPermanentlyDenied) {
      _showSettingsDialog('الموقع');
      return false;
    }

    return status.isGranted || status.isLimited;
  }

  static void _showSettingsDialog(String permissionName) {
    MyDialog().getDialog(
      'صلاحية $permissionName مطلوبة',
      'لقد قمت برفض صلاحية $permissionName سابقاً. يرجى تفعيلها من الإعدادات لتمكين التطبيق من العمل.',
      () async {
        await openAppSettings();
        Get.back();
      },
    );
  }
}
