import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:shared_preferences/shared_preferences.dart';

class SecureStorage {
  final FlutterSecureStorage _storage = const FlutterSecureStorage();

  Future<String?> read(String key) async {
    return await _storage.read(key: key);
  }

  Future<Map<String, String>> readAll() async {
    return await _storage.readAll();
  }

  Future<void> delete(String key) async {
    await _storage.delete(key: key);
  }

  //We need to use shared preferences because they are cleared on uninstall unlike flutter secure storage
  Future<void> clearKeychainValues() async {
    final prefs = await SharedPreferences.getInstance();

    if (prefs.getBool('is_first_app_launch') ?? true) {
      await _storage.deleteAll();

      await prefs.setBool('is_first_app_launch', false);
    }
  }

  Future<void> deleteAll() async {
    await _storage.deleteAll();
  }

  Future<void> write(String key, String value) async {
    await _storage.write(key: key, value: value);
  }
}

class ComwellPreferences {
  late final SharedPreferences _sharedPreferences;

  Future<void> init() async {
    _sharedPreferences = await SharedPreferences.getInstance();
  }

  bool get isLoggedIn => _sharedPreferences.getBool(_keyIsLoggedIn) ?? false;

  Future<void> setIsLoggedIn(bool isLoggedIn) async {
    await _sharedPreferences.setBool(_keyIsLoggedIn, isLoggedIn);
  }

  bool get onboardingHasSeenBluetooth =>
      _sharedPreferences.getBool(_keyOnboardingHasSeenBluetooth) ?? false;

  Future<void> setOnboardingHasSeenBluetooth() async {
    await _sharedPreferences.setBool(_keyOnboardingHasSeenBluetooth, true);
  }

  bool get onboardingHasSeenNotification =>
      _sharedPreferences.getBool(_keyOnboardingHasSeenNotification) ?? false;

  Future<void> setOnboardingHasSeenNotification() async {
    await _sharedPreferences.setBool(_keyOnboardingHasSeenNotification, true);
  }

  bool get onboardingHasSeenUsageTracking =>
      _sharedPreferences.getBool(_keyOnboardingHasSeenUsageTracking) ?? false;

  Future<void> setOnboardingHasSeenUsageTracking() async {
    await _sharedPreferences.setBool(_keyOnboardingHasSeenUsageTracking, true);
  }

  bool get allowUsageTracking => _sharedPreferences.getBool(_keyAllowUsageTracking) ?? false;

  Future<void> setAllowUsageTracking(bool allow) async {
    await _sharedPreferences.setBool(_keyAllowUsageTracking, allow);
  }

  Future<void> clear() async {
    await _sharedPreferences.clear();
  }

  Future<void> setUserAgent(String userAgent) async {
    await _sharedPreferences.setString(_keyUserAgent, userAgent);
  }

  String get userAgent => _sharedPreferences.getString(_keyUserAgent) ?? '';

  static const _keyUserAgent = "user_agent";
  static const _keyOnboardingHasSeenBluetooth = "_keyOnboardingHasSeenBluetooth";
  static const _keyOnboardingHasSeenNotification = "_keyOnboardingHasSeenNotification";
  static const _keyOnboardingHasSeenUsageTracking = "_keyOnboardingHasSeenUsageTracking";
  static const _keyAllowUsageTracking = "_keyAllowUsageTracking";
  static const _keyIsLoggedIn = "_keyIsLoggedIn";
}