// Интерфейс для добавления шаблона rq с параметрами.
// Ссылка для открытия находится в меню "Еще" (справа сверху страницы).

function rqjs_show() {
	$("#rqjs-dialog").dialog("open");
}

var rqjs = {
	params: [],
	final_code: "",

	edit: function() {
		$.getJSON(mw.config.get('wgScriptPath') + '/api.php?action=tokens&format=json', function(tokens_response) {
			$.post(mw.config.get('wgScriptPath') + "/api.php?action=edit&format=json", {
				title: mw.config.get('wgPageName'),
				minor: true,
				nocreate: true,
				summary: `+rq ([[u:Skmp/rq.js|rqjs]])`,
				appendtext: "\n" + rqjs.final_code,
				token: tokens_response.tokens.edittoken
			}, function() {
				location.reload();
			});
		});
	},

	setCode: function(code) {
		rqjs.params = [];

		const checkboxes = document.querySelectorAll("#rqjs-dialog input");
		for(const checkbox of checkboxes) {
			checkbox.checked = false;
		}

		rqjs.final_code = `{{${ code }}}`;
		document.getElementById("rqjs-code").innerText = rqjs.final_code;
	},

	generateCode: function(el) {
		param = el.name;

		if(el.checked) {
			rqjs.params.push(param);
		} else {
			rqjs.params.pop(param);
		}

		if(rqjs.params.length === 0) {
			rqjs.final_code = `{{rq}}`;
		} else {
			rqjs.final_code = `{{rq|${ rqjs.params.join("|") }}}`;
		}

		document.getElementById("rqjs-code").innerText = rqjs.final_code;
	}
};

mw.loader.using('mediawiki.util', function() {
	if(mw.config.get('wgNamespaceNumber') === 0) {
		mw.util.addPortletLink(
			'p-cactions',
			'javascript:rqjs_show()',
			'+rq',
			't-rqjs',
			'Добавить шаблон rq'
		);
	}
});

mw.loader.using('jquery.ui', function () {
	if (mw.config.get('wgNamespaceNumber') !== 0) return;

	$('<div id="rqjs-dialog">\
<div style="display: flex; justify-content: space-between">\
<fieldset style="width: 43%" name="crit"><legend>Критические недостатки</legend>\
	<div><input name="notability" type="checkbox"><label for="notability">Значимость</label></div>\
	<div><input name="sources" type="checkbox"><label for="sources" data-only-code="нет ссылок">Нет ссылок</label></div>\
	<div><input name="refless" type="checkbox"><label for="refless">Нет сносок</label></div>\
	<div><input name="neutral" type="checkbox"><label for="neutral" data-only-code="проверить нейтральность">Проверить нейтральность</label></div>\
	<div><input name="empty" type="checkbox"><label for="empty">Дописать</label></div>\
</fieldset>\
<fieldset style="width: 43%" name="quality"><legend>Качество текста</legend>\
	<div><input name="checktranslate" type="checkbox"><label for="checktranslate">Плохой перевод</label></div>\
	<div><input name="translate" type="checkbox"><label for="translate">Перевести</label></div>\
	<div><input name="cleanup" type="checkbox"><label for="cleanup">Переработать</label></div>\
	<div><input name="grammar" type="checkbox"><label for="grammar" data-only-code="опечатки">Опечатки</label></div>\
	<div><input name="style" type="checkbox"><label for="style">Стиль статьи</label></div>\
	<div><input name="global" type="checkbox"><label for="global">Глобализировать</label></div>\
</fieldset>\
</div>\
<div style="display: flex; justify-content: space-between">\
<fieldset style="width: 43%" name="content"><legend>Наполнение</legend>\
	<div><input name="nolead" type="checkbox"><label for="nolead">Нет преамбулы</label></div>\
	<div><input name="shortlead" type="checkbox"><label for="shortlead">Короткая преамбула</label></div>\
	<div><input name="wikify" type="checkbox"><label for="wikify">Викифицировать</label></div>\
	<div><input name="check" type="checkbox"><label for="check">Проверить факты</label></div>\
	<div><input name="renew" type="checkbox"><label for="renew" data-only-code="обновить">Обновить</label></div>\
	<div><input name="img" type="checkbox"><label for="img">Добавить иллюстрации</label></div>\
	<div><input name="part" type="checkbox"><label for="part" data-only-code="нет разделов">Нет разделов</label></div>\
	<div><input name="cat" type="checkbox"><label for="cat" data-only-code="нет категорий">Нет категорий</label></div>\
	<div><input name="infobox" type="checkbox"><label for="infobox" data-only-code="нет карточки">Нет карточки</label></div>\
	<div><input name="taxobox" type="checkbox"><label for="taxobox" data-only-code="нет таксобокса">Нет таксобокса</label></div>\
	<div><input name="coord" type="checkbox"><label for="coord" data-only-code="нет координат">Нет координат</label></div>\
</fieldset>\
<fieldset style="width: 43%" name="other"><legend>Прочее</legend>\
	<div><input name="linkless" type="checkbox"><label for="linkless">изолированная статья</label></div>\
	<div><input name="nocat=1" type="checkbox"><label style="font-family: monospace; font-size: 12px" for="nocat=1">(Отключить категории)</label></div>\
</fieldset>\
</div>\
<pre id="rqjs-code">{{rq}}</pre>\
</div>').dialog({
		title: "Добавить шаблон rq",
		closeOnEscape: true,
		autoOpen: false,
		resizable: false,
		width: 500,
		dialogClass: "rqjs-dialog-root",
		buttons: [{
			text: "Записать",
			click: function() {
				rqjs.edit();

				const button = document.querySelector(".rqjs-dialog-root button");

				button.getElementsByTagName("span")[0].innerText = "Записываем...";
				button.style.pointerEvents = "none";

				this.style.opacity = "0.5";
			}
		}]
	});

	const checkboxes = document.querySelectorAll("#rqjs-dialog input");
	for(const checkbox of checkboxes) {
		checkbox.onclick = () => rqjs.generateCode(checkbox);
	}

	const labels = document.querySelectorAll("#rqjs-dialog label");
	for(const label of labels) {
		const code = label.dataset.onlyCode || label.getAttribute('for');

		// Skip img
		if (code === "img") continue;
		else if (code === "nocat=1") continue;

		label.innerHTML += ' <a style="font-family: monospace" href="javascript:rqjs.setCode(\'subst:' + code + '\')">(!)</a>';
	}
});