import 'package:permission_handler/permission_handler.dart';

import 'interfaces/permission.dart';

class PermissionManager implements IPermissionManager {
  PermissionManager();

  @override
  Future<void> requestLocationPermission() async {
    PermissionStatus status = await Permission.location.request();
    if (status.isGranted) {
      // 权限已授予，可以进行相关操作
      // 在这里添加你的逻辑代码
      return;
    } else {
      // 权限被拒绝
      if (status.isPermanentlyDenied) {
        // 用户永久拒绝了权限，你可以引导用户前往设置页面手动授予权限
        openAppSettings();
      } else {
        // 用户暂时拒绝了权限
        // 在这里可以给用户一些解释，然后再次请求权限
        requestLocationPermission();
      }
      return;
    }
  }

  @override
  Future<void> requestBluetoothConnectPermission() async {
    PermissionStatus status = await Permission.bluetoothConnect.request();
    if (status.isGranted) {
      // 权限已授予，可以进行相关操作
      // 在这里添加你的逻辑代码
      return;
    } else {
      // 权限被拒绝
      if (status.isPermanentlyDenied) {
        // 用户永久拒绝了权限，你可以引导用户前往设置页面手动授予权限
        openAppSettings();
      } else {
        // 用户暂时拒绝了权限
        // 在这里可以给用户一些解释，然后再次请求权限
        requestBluetoothConnectPermission();
      }
      return;
    }
  }

  @override
  Future<void> requestBluetoothScanPermission() async {
    PermissionStatus status = await Permission.bluetoothScan.request();
    if (status.isGranted) {
      // 权限已授予，可以进行相关操作
      // 在这里添加你的逻辑代码
      return;
    } else {
      // 权限被拒绝
      if (status.isPermanentlyDenied) {
        // 用户永久拒绝了权限，你可以引导用户前往设置页面手动授予权限
        openAppSettings();
      } else {
        // 用户暂时拒绝了权限
        // 在这里可以给用户一些解释，然后再次请求权限
        requestBluetoothScanPermission();
      }
      return;
    }
  }

  @override
  Future<void> requestBluetoothAdvertisePermission() async {
    PermissionStatus status = await Permission.bluetoothAdvertise.request();
    if (status.isGranted) {
      // 权限已授予，可以进行相关操作
      // 在这里添加你的逻辑代码
      return;
    } else {
      // 权限被拒绝
      if (status.isPermanentlyDenied) {
        // 用户永久拒绝了权限，你可以引导用户前往设置页面手动授予权限
        openAppSettings();
      } else {
        // 用户暂时拒绝了权限
        // 在这里可以给用户一些解释，然后再次请求权限
        requestBluetoothAdvertisePermission();
      }
      return;
    }
  }

  @override
  Future<void> requestInstallPackagesPermission() async {
    PermissionStatus status = await Permission.requestInstallPackages.request();
    if (status.isGranted) {
      // 权限已授予，可以进行相关操作
      // 在这里添加你的逻辑代码
      return;
    } else {
      // 权限被拒绝
      if (status.isPermanentlyDenied) {
        // 用户永久拒绝了权限，你可以引导用户前往设置页面手动授予权限
        openAppSettings();
      } else {
        // 用户暂时拒绝了权限
        // 在这里可以给用户一些解释，然后再次请求权限
        requestInstallPackagesPermission();
      }
      return;
    }
  }
}

enum PermissionEnum {
  //音视频相关
  VideoAndVoiceRelevant,

  //IO相关
  IORelevant,

  //App 需要的所有权限
  All,
}
