/*
	Created by Michael Schuijff <michael@reglobe.nl>
	Copyright Lost Images, The Netherlands
	
	For more information, visit www.michaelschuijff.nl
*/

window.options = window.options || {};

(function () {
	let values = {};
	
	for (let option of Object.keys(localStorage)) {
		values[option] = localStorage[option];
	}
	
	let db;
	
	document.addEventListener('deviceready', (e) => {
		db = sqlitePlugin.openDatabase({
			name: 'social.db', location: 'default'
		});
		
		db.transaction((tx) => {
			tx.executeSql('CREATE TABLE IF NOT EXISTS options ( option TEXT NOT NULL, value )');
			tx.executeSql('CREATE UNIQUE INDEX IF NOT EXISTS idxOption ON options ( option )');
			
			for (let option in values) {
				let value = values[option];
				tx.executeSql('REPLACE INTO options ( option, value ) VALUES ( ?, ? )', [option, value]);
			}
			
			db.executeSql('SELECT * FROM options', [], (rs) => {
				for (let i = 0, length = rs.rows.length; i < length; i ++) {
					let option = rs.rows.item(i);
					
					if (values[option.option] === undefined) {
						values[option.option] = option.value;
					}
				}
				
				localStorage.clear();
				
				try {
					if (navigator.connection.type == 'none') {
						config.offline = true;
					}
				} catch (e) {};
				
				document.dispatchEvent(new Event('loaded'));
			});
		}, (error) => {
			console.log(error.message);
		});
	});
	
	if (!window.cordova) {
		document.addEventListener('DOMContentLoaded', () => {
			setTimeout(() => document.dispatchEvent(new Event('loaded')), 0);
		});
	}

	options.get = function (option, defaultValue) {
		if (option in values) {
			return values[option];
		}
		
		if (defaultValue === undefined) {
			defaultValue = null;
		}
		
		return defaultValue;
	}
	
	options.set = function (option, value) {
		values[option] = value;
		
		if (db) {
			db.executeSql('REPLACE INTO options ( option, value ) VALUES ( ?, ? )', [option, value], null, console.log);
		} else if (!window.cordova) {
			localStorage.setItem(option, value);
		}
	}
	
	options.delete = function (option) {
		delete values[option];
		
		if (db) {
			db.executeSql('DELETE FROM options WHERE option = ?', [option], null, console.log);
		} else if (!window.cordova) {
			localStorage.removeItem(option);
		}
	}
})();
