/* --------------------------------------------------------------
 auto_updater.js 2019-02-07
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2019 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

jse.libs.auto_updater = jse.libs.auto_updater || {};

(function(exports) {
	'use strict';
	
	// ------------------------------------------------------------------------
	// VARIABLES AND CONSTANTS
	// ------------------------------------------------------------------------
	
	/**
	 * Default options for controller,
	 *
	 * @type {object}
	 */
	const URLS = {
		processInstallation: '../gambio_store.php?do=processUpdate',
		permissionCheck: 'admin.php?do=AutoUpdaterAjax/checkPermission',
		uninstallTheme: 'admin.php?do=AutoUpdaterAjax/uninstallTheme',
	};
	
	// ------------------------------------------------------------------------
	// FUNCTIONS
	// ------------------------------------------------------------------------
	
	/**
	 * Installs a given update.
	 */
	exports.installGambioStorePackage = function(gambioStoreData, updateProgressCallback) {
		return new Promise((resolve, reject) => {
			const request = {
				url: URLS.processInstallation,
				data: {gambioStoreData: JSON.stringify(gambioStoreData)},
			};
			
			jse.libs.xhr.post(request).done(response => {
				if (response.success !== true) {
					return reject('Unexpected error');
				}
				
				updateProgressCallback(response);
				
				if (response.done === true) {
					return resolve();
				}
				
				exports.installGambioStorePackage(gambioStoreData, updateProgressCallback).then(() => {
					resolve();
				}).catch(error => {
					reject('Unexpected error');
				})
			}).fail(() => {
				reject('Install processing request failed');
			});
		});
	};
	
	/**
	 * Checks the file permissions for a given update.
	 */
	exports.checkGambioStorePackageFilePermissions = function(gambioStoreData) {
		return new Promise((resolve, reject) => {
			const request = {
				url: URLS.permissionCheck,
				data: {gambioStoreData: JSON.stringify(gambioStoreData)},
			};
			
			jse.libs.xhr.post(request).done(response => {
				if (response.success !== true || response.result !== true) {
					reject('Permission check failed');
				}
				resolve();
			}).fail(() => {
				reject('Permission check request failed');
			});
		});
	};
	
	/**
	 * Checks the file permissions for a given update.
	 */
	exports.uninstallTheme = function(themeName) {
		return new Promise((resolve, reject) => {
			const request = {
				url: URLS.uninstallTheme,
				data: {themeName: themeName}
			};
			
			jse.libs.xhr.post(request).done(response => {
				if (response.success !== true) {
					reject('Uninstall failed');
				}
				resolve();
			}).fail((data) => {
				reject(data);
			});
		});
	};
	
})(jse.libs.auto_updater);