import 'package:app_settings/app_settings.dart';
import 'package:comwell_key_app/presentation/base/base_cubit.dart';
import 'package:comwell_key_app/domain/models/app_error.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:permission_handler/permission_handler.dart';

part '../../../../.generated/presentation/screens/onboarding/notifications/notification_permission_cubit.freezed.dart';

class NotificationPermissionCubit extends BaseCubit<NotificationPermissionState> {
  NotificationPermissionCubit(
    this._preferences,
  ) : super(const NotificationPermissionState()) {
    init();
  }

  final ComwellPreferences _preferences;
  int _clickCount = 0;

  Future<void> init() async {
    await _preferences.setOnboardingHasSeenNotification();
  }

  Future<void> onAcceptClicked() async {
    _clickCount++;
    final shouldRedirectToSettings = _clickCount >= 3;
    if (shouldRedirectToSettings) {
      await AppSettings.openAppSettings(type: AppSettingsType.notification);
    } else {
      await Permission.notification.request();
    }
  }
}

@freezed
abstract class NotificationPermissionState with _$NotificationPermissionState {
  const factory NotificationPermissionState({
    @Default(false) bool isLoading,
    @Default(AppError.none) AppError errorType,
  }) = _NotificationPermissionState;
}