
var
	ko = require('ko'),

	Translator = require('Common/Translator'),

	Settings = require('Storage/Settings'),
	CoreStore = require('Stores/Admin/Core'),
	AppStore = require('Stores/Admin/App');

/**
 * @constructor
 */
function AboutAdminSettings()
{
	this.version = ko.observable(Settings.appSettingsGet('version'));
	this.access = ko.observable(!!Settings.settingsGet('CoreAccess'));
	this.errorDesc = ko.observable('');

	this.coreReal = CoreStore.coreReal;
	this.coreChannel = CoreStore.coreChannel;
	this.coreType = CoreStore.coreType;
	this.coreUpdatable = CoreStore.coreUpdatable;
	this.coreAccess = CoreStore.coreAccess;
	this.coreChecking = CoreStore.coreChecking;
	this.coreUpdating = CoreStore.coreUpdating;
	this.coreWarning = CoreStore.coreWarning;
	this.coreVersion = CoreStore.coreVersion;
	this.coreRemoteVersion = CoreStore.coreRemoteVersion;
	this.coreRemoteRelease = CoreStore.coreRemoteRelease;
	this.coreVersionCompare = CoreStore.coreVersionCompare;

	this.community = RL_COMMUNITY || AppStore.community();

	this.coreRemoteVersionHtmlDesc = ko.computed(function() {
		Translator.trigger();
		return Translator.i18n('TAB_ABOUT/HTML_NEW_VERSION', {'VERSION': this.coreRemoteVersion()});
	}, this);

	this.statusType = ko.computed(function() {

		var
			sType = '',
			iVersionCompare = this.coreVersionCompare(),
			bChecking = this.coreChecking(),
			bUpdating = this.coreUpdating(),
			bReal = this.coreReal();

		if (bChecking)
		{
			sType = 'checking';
		}
		else if (bUpdating)
		{
			sType = 'updating';
		}
		else if (bReal && 0 === iVersionCompare)
		{
			sType = 'up-to-date';
		}
		else if (bReal && -1 === iVersionCompare)
		{
			sType = 'available';
		}
		else if (!bReal)
		{
			sType = 'error';
			this.errorDesc('Cannot access the repository at the moment.');
		}

		return sType;

	}, this);
}

AboutAdminSettings.prototype.onBuild = function()
{
	if (this.access() && !this.community)
	{
		require('App/Admin').default.reloadCoreData();
	}
};

AboutAdminSettings.prototype.updateCoreData = function()
{
	if (!this.coreUpdating() && !this.community)
	{
		require('App/Admin').default.updateCoreData();
	}
};

export {AboutAdminSettings, AboutAdminSettings as default};
