import 'dart:io';

import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:permission_handler/permission_handler.dart';

class NotificationPermissionNotifier extends StateNotifier<PermissionStatus> {
  NotificationPermissionNotifier() :
    super(Platform.isAndroid
      ? PermissionStatus.granted
      : PermissionStatus.restricted,
    ) {
    // Sets the initial state
    getNotificationPermission().then((p) => state = p);
  }

  /// Requests the notification permission
  /// Note: In Android, this is always granted
  Future<PermissionStatus> requestNotificationPermission() async {
     final permission = await Permission.notification.request();
     state = permission;
     return permission;
  }

  /// Whether the user has the permission or not
  /// Note: In Android, this is always true
  Future<bool> hasNotificationPermission() {
    return Permission.notification.isGranted;
  }

  Future<PermissionStatus> getNotificationPermission() async {
    final status = await Permission.notification.status;
    state = status;
    return status;
  }

  /// Either the permission was granted already or else ask for the permission
  Future<bool> hasOrAskForNotificationPermission() {
    return requestNotificationPermission().then((p) => p.isGranted);
  }

}
final notificationPermissionProvider
  = StateNotifierProvider<NotificationPermissionNotifier, PermissionStatus>
    ((ref) => NotificationPermissionNotifier());
