
import _ from '_';
import ko from 'ko';

import {delegateRunOnDestroy, boolToAjax} from 'Common/Utils';
import {Magics} from 'Common/Enums';
import {bIsHttps} from 'Common/Globals';

import PgpStore from 'Stores/User/Pgp';
import SettingsStore from 'Stores/User/Settings';

import Remote from 'Remote/User/Ajax';

import {getApp} from 'Helper/Apps/User';

import {showScreenPopup} from 'Knoin/Knoin';

class OpenPgpUserSettings
{
	constructor() {
		this.openpgpkeys = PgpStore.openpgpkeys;
		this.openpgpkeysPublic = PgpStore.openpgpkeysPublic;
		this.openpgpkeysPrivate = PgpStore.openpgpkeysPrivate;

		this.openPgpKeyForDeletion = ko.observable(null).deleteAccessHelper();

		this.allowDraftAutosave = SettingsStore.allowDraftAutosave;

		this.isHttps = bIsHttps;
	}

	addOpenPgpKey() {
		showScreenPopup(require('View/Popup/AddOpenPgpKey'));
	}

	generateOpenPgpKey() {
		showScreenPopup(require('View/Popup/NewOpenPgpKey'));
	}

	viewOpenPgpKey(openPgpKey) {
		if (openPgpKey)
		{
			showScreenPopup(require('View/Popup/ViewOpenPgpKey'), [openPgpKey]);
		}
	}

	/**
	 * @param {OpenPgpKeyModel} openPgpKeyToRemove
	 * @returns {void}
	 */
	deleteOpenPgpKey(openPgpKeyToRemove) {
		if (openPgpKeyToRemove && openPgpKeyToRemove.deleteAccess())
		{
			this.openPgpKeyForDeletion(null);

			if (openPgpKeyToRemove && PgpStore.openpgpKeyring)
			{
				const findedItem = _.find(PgpStore.openpgpkeys(), (key) => openPgpKeyToRemove === key);
				if (findedItem)
				{
					PgpStore.openpgpkeys.remove(findedItem);
					delegateRunOnDestroy(findedItem);

					PgpStore
						.openpgpKeyring[findedItem.isPrivate ? 'privateKeys' : 'publicKeys']
						.removeForId(findedItem.guid);

					PgpStore.openpgpKeyring.store();
				}

				getApp().reloadOpenPgpKeys();
			}
		}
	}

	onBuild() {
		_.delay(() => {

			this.allowDraftAutosave.subscribe(
				Remote.saveSettingsHelper('AllowDraftAutosave', boolToAjax)
			);

		}, Magics.Time50ms);
	}
}

export {OpenPgpUserSettings, OpenPgpUserSettings as default};
