import 'package:mmkv/mmkv.dart';

class KVUtil {
  KVUtil._();

  static MMKV? _mmkv;

  static init() async {
    if (_mmkv != null) {
      return;
    }
    await MMKV.initialize();
    _mmkv = MMKV.defaultMMKV();
  }

  static void putString(String key, String? value) {
    _getMMKV().encodeString(key, value);
  }

  static String? getString(String key, String? defaultValue) {
    return _getMMKV().decodeString(key) ?? defaultValue;
  }

  static void putInt(String key, int value) {
    _getMMKV().encodeInt(key, value);
  }

  static int getInt(String key, int defaultValue) {
    return _getMMKV().decodeInt(key, defaultValue: defaultValue);
  }

  static void putBool(String key, bool value) {
    _getMMKV().encodeBool(key, value);
  }

  static bool getBool(String key, bool defaultValue) {
    return _getMMKV().decodeBool(key, defaultValue: defaultValue);
  }

  static void putDouble(String key, double value) {
    _getMMKV().encodeDouble(key, value);
  }

  static double getDouble(String key, double defaultValue) {
    return _getMMKV().decodeDouble(key, defaultValue: defaultValue);
  }

  static MMKV _getMMKV() {
    _mmkv ??= MMKV.defaultMMKV();
    return _mmkv!;
  }
}
