import MMKVStorage from 'react-native-mmkv-storage';

const MMKV = new MMKVStorage.Loader()
	// MODES.MULTI_PROCESS = ACCESSIBLE BY APP GROUP (iOS)
	.setProcessingMode(MMKVStorage.MODES.MULTI_PROCESS)
	.withEncryption()
	.initialize();

class UserPreferences {
	constructor() {
		this.mmkv = MMKV;
	}

	async getStringAsync(key) {
		try {
			const value = await this.mmkv.getStringAsync(key);
			return value;
		} catch {
			return null;
		}
	}

	setStringAsync(key, value) {
		return this.mmkv.setStringAsync(key, value);
	}

	async getBoolAsync(key) {
		try {
			const value = await this.mmkv.getBoolAsync(key);
			return value;
		} catch {
			return null;
		}
	}

	setBoolAsync(key, value) {
		return this.mmkv.setBoolAsync(key, value);
	}

	async getMapAsync(key) {
		try {
			const value = await this.mmkv.getMapAsync(key);
			return value;
		} catch {
			return null;
		}
	}

	setMapAsync(key, value) {
		return this.mmkv.setMapAsync(key, value);
	}

	removeItem(key) {
		return this.mmkv.removeItem(key);
	}
}

const userPreferences = new UserPreferences();
export default userPreferences;