import 'package:logging/logging.dart';
import 'package:nc_photos/stream_extension.dart';
import 'package:np_platform_permission/np_platform_permission.dart';

Future<Map<String, int>> requestPermissionsForResult(
        List<String> permissions) =>
    _doRequest(() => Permission.request(permissions));

Future<Map<String, int>> requestReadExternalStorageForResult() =>
    _doRequest(() => Permission.requestReadExternalStorage());

Future<Map<String, int>> requestPostNotificationsForResult() =>
    _doRequest(() => Permission.requestPostNotifications());

Future<Map<String, int>> _doRequest(Future Function() op) async {
  Map<String, int>? result;
  final resultFuture = Permission.stream
      .whereType<PermissionRequestResult>()
      .first
      .then((ev) => result = ev.grantResults);
  await op();
  await resultFuture;
  _log.info("[_doRequest] Result: $result");
  return result!;
}

final _log = Logger("mobile.android.permission_util");