/*
 * Importálva az angol Wikipédiából:
 * https://en.wikipedia.orghttps://wikines.com/hu/MediaWiki:Gadget-defaultsummaries.js
 *
 * Imported as of 09/06/2011 from ]
 * Edited version from ]
 * Implements default edit summary dropdown boxes
 */

(function () { // Wrap with anonymous function
	/**
	 * @param {string} text
	 * @returns {OO.ui.MenuOptionWidget}
	 */
	function getOption(text) {
		return new OO.ui.MenuOptionWidget({
			data: text,
			label: text,
		});
	}

	/**
	 * @param {string} label
	 * @param {OO.ui.MenuOptionWidget} options
	 * @param {jQuery} $summaryBox
	 * @returns {jQuery}
	 */
	function getDropdown(label, options, $summaryBox) {
		const dropdown = new OO.ui.DropdownWidget({
			label: label,
			menu: {
				items: options
			},
			$overlay: true,
		});
		const menu = dropdown.getMenu();
		menu.on('select', widget => {
			if (widget) {
				addSummary($summaryBox, widget.getData());
				menu.selectItem();
				dropdown.setLabel(label);
			}
		});
		return dropdown.$element;
	}

	/**
	 * Add a canned summary text to the edit summary field.
	 * @param {jQuery} $summaryBox
	 * @param {string} text
	 */
	function addSummary($summaryBox, text) {
		// Save the original value of the edit summary field
		var editsummOriginalSummary = $summaryBox.val();

		var newSummary = editsummOriginalSummary;

		// Append old edit summary with space, if exists,
		// and last character != space
		if (newSummary.length !== 0 && newSummary.charAt(newSummary.length - 1) !== " ") {
			newSummary += " ";
		}
		newSummary += text;
		$summaryBox.val( newSummary ).trigger( 'change' );
	}

	/**
	 * For convenience, get a `<div>` with dropdown boxes with
	 * some canned edit summaries.
	 * @param {jQuery} $summaryBox The summary box to add the summaries to
	 */
	function getSummaryOptions($summaryBox) {
		const div = document.createElement('div');
		div.id = 'defaultsummaries';

		const minorOptions = [
			getOption("Törölt kép(ek) linkje ki"),
			getOption("Elütések, nyelvtani javítások"),
			getOption("Formázás"),
			getOption("] vagy teszt szerkesztés ]a"),
			getOption("Magyarázat nélküli törlés ]a"),
			getOption("Kisebb lektorálás"),
		];
		const majorOptions = [
			getOption("Azonnal törlendő"),
			getOption("]"),
		];

		const namespaceNumber = mw.config.get('wgNamespaceNumber');
		if (namespaceNumber === 0) {
			majorOptions.push(
				getOption("Szócikk bővítése"),
				getOption("Forráshivatkozás hozzáadása"),
				getOption("Kategória hozzáadása/eltávolítása"),
				getOption("Külső hivatkozás hozzáadása/eltávolítása"),
				getOption("Belső hivatkozások hozzáadása/eltávolítása"),
				getOption("Forrás nélküli tartalom eltávolítása"),
				getOption("] eltávolítása"),
				getOption("Javítgatások"),
				getOption("Nagyobb lektorálás")
			);
		} else {
			majorOptions.push(
				getOption("Válasz"),
				getOption("Megjegyzés"),
				getOption("Javaslat"),
				getOption("Kérdés"),
				getOption("Megoldva/kész")
			);
			// vitalapok (szerkesztői kivételével)
			if ((namespaceNumber % 2 !== 0) && (namespaceNumber !== 3)) {
				majorOptions.push(getOption("] kihelyezése"));
			}
		}

		getDropdown("Gyakori szerkesztési összefoglalók", majorOptions, $summaryBox).appendTo(div);
		getDropdown("Gyakori apró szerkesztési összefoglalók", minorOptions, $summaryBox).appendTo(div);
		return div;
	}

	mw.hook('ve.saveDialog.stateChanged').add(() => {
		//.ve-init-mw-viewPageTarget-saveDialog-checkboxes
		mw.loader.using('oojs-ui-widgets').then(() => {
			const $dialogBody = ve.init.target.saveDialog.$body;
			if ($dialogBody.find('#defaultsummaries').length === 0) {
				const $summaryBox = $dialogBody.find('.ve-ui-mwSaveDialog-summary textarea');
				$dialogBody.find('.ve-ui-mwSaveDialog-options').before(getSummaryOptions($summaryBox));
			}
		});
	});
	mw.hook('wikipage.editform').add(($editForm) => {
		mw.loader.using('oojs-ui-widgets').then(() => {
			if ($editForm.find('#defaultsummaries').length === 0) {
				const $summaryBox = $editForm.find('#wpSummary');
				const div = getSummaryOptions($summaryBox);
				div.style.display = 'flex';
				div.style.width = '75%';
				$editForm.find('.editCheckboxes').before(div);
			}
		});
	});
}()); // End wrap with anonymous function