/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */

/**
 * @constructor
 * @extends KnoinAbstractViewModel
 */
function PopupsFolderSystemViewModel()
{
	KnoinAbstractViewModel.call(this, 'Popups', 'PopupsFolderSystem');

	Utils.initOnStartOrLangChange(function () {
		this.sChooseOnText = Utils.i18n('POPUPS_SYSTEM_FOLDERS/SELECT_CHOOSE_ONE');
		this.sUnuseText = Utils.i18n('POPUPS_SYSTEM_FOLDERS/SELECT_UNUSE_NAME');
	}, this);

	this.notification = ko.observable('');

	this.folderSelectList = ko.computed(function () {
		return RL.folderListOptionsBuilder([], RL.data().folderList(), RL.data().folderListSystemNames(), [
			['', this.sChooseOnText],
			[Consts.Values.UnuseOptionValue, this.sUnuseText]
		]);
	}, this);
	
	var
		oData = RL.data(),
		self = this,
		fSaveSystemFolders = null,
		fCallback = null
	;
		
	this.sentFolder = oData.sentFolder;
	this.draftFolder = oData.draftFolder;
	this.spamFolder = oData.spamFolder;
	this.trashFolder = oData.trashFolder;
	
	fSaveSystemFolders = _.debounce(function () {

		RL.settingsSet('SentFolder', self.sentFolder());
		RL.settingsSet('DraftFolder', self.draftFolder());
		RL.settingsSet('SpamFolder', self.spamFolder());
		RL.settingsSet('TrashFolder', self.trashFolder());

		RL.remote().saveSystemFolders(Utils.emptyFunction, {
			'SentFolder': self.sentFolder(),
			'DraftFolder': self.draftFolder(),
			'SpamFolder': self.spamFolder(),
			'TrashFolder': self.trashFolder(),
			'NullFolder': 'NullFolder'
		});
		
	}, 1000);

	fCallback = function () {

		RL.settingsSet('SentFolder', self.sentFolder());
		RL.settingsSet('DraftFolder', self.draftFolder());
		RL.settingsSet('SpamFolder', self.spamFolder());
		RL.settingsSet('TrashFolder', self.trashFolder());

		fSaveSystemFolders();
	};

	this.sentFolder.subscribe(fCallback);
	this.draftFolder.subscribe(fCallback);
	this.spamFolder.subscribe(fCallback);
	this.trashFolder.subscribe(fCallback);

	this.defautOptionsAfterRender = Utils.defautOptionsAfterRender;

	Knoin.constructorEnd(this);
}

Utils.extendAsViewModel('PopupsFolderSystemViewModel', PopupsFolderSystemViewModel);

PopupsFolderSystemViewModel.prototype.sChooseOnText = '';
PopupsFolderSystemViewModel.prototype.sUnuseText = '';

/**
 * @param {number=} iNotificationType = Enums.SetSystemFoldersNotification.None
 */
PopupsFolderSystemViewModel.prototype.onShow = function (iNotificationType)
{
	var sNotification = '';

	iNotificationType = Utils.isUnd(iNotificationType) ? Enums.SetSystemFoldersNotification.None : iNotificationType;

	switch (iNotificationType)
	{
		case Enums.SetSystemFoldersNotification.Sent:
			sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SENT');
			break;
		case Enums.SetSystemFoldersNotification.Draft:
			sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_DRAFTS');
			break;
		case Enums.SetSystemFoldersNotification.Spam:
			sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SPAM');
			break;
		case Enums.SetSystemFoldersNotification.Trash:
			sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_TRASH');
			break;
	}

	this.notification(sNotification);
};

PopupsFolderSystemViewModel.prototype.onBuild = function ()
{
	var self = this;
	$window.on('keydown', function (oEvent) {
		var bResult = true;
		if (oEvent && Enums.EventKeyCode.Esc === oEvent.keyCode && self.modalVisibility())
		{
			Utils.delegateRun(self, 'cancelCommand');
			bResult = false;
		}
		return bResult;
	});
};

