import {I18n} from "./i18n.js";
import {Dialog, FormError} from "./settings.js";
await I18n.done;
const info = JSON.parse(localStorage.getItem("instanceinfo") as string);

function makeMenu2(email: string | void) {
	const d2 = new Dialog("");
	d2.options.addTitle(I18n.login.recovery());
	const headers = {
		"Content-Type": "application/json",
	};
	const opt = d2.float.options.addForm(
		"",
		async (obj) => {
			if ("token" in obj && typeof obj.token === "string") {
				window.location.href = "/login" + window.location.search;
			}
		},
		{
			fetchURL: info.api + "/auth/reset",
			method: "POST",
			headers,
		},
	);
	if (email !== undefined) {
		opt.addTextInput(I18n.login.pasteInfo(), "token");
	}
	opt.addTextInput(I18n.login.newPassword(), "password", {password: true});
	const p2 = opt.addTextInput(I18n.login.enterPAgain(), "password2", {password: true});
	opt.addPreprocessor((e) => {
		const obj = e as unknown as {password: string; password2?: string; token?: string};
		const token = obj.token || window.location.href;
		if (URL.canParse(token)) {
			obj.token = new URLSearchParams(token.split("#")[1]).get("token") as string;
		}

		if (obj.password !== obj.password2) {
			throw new FormError(p2, I18n.localuser.PasswordsNoMatch());
		}
		delete obj.password2;
	});
	d2.show(false);
}
function makeMenu1() {
	const d = new Dialog("");
	d.options.addTitle(I18n.login.recovery());
	let area: HTMLElement | undefined = undefined;
	const opt = d.float.options.addForm(
		"",
		(e) => {
			if (Object.keys(e).length === 0) {
				d.hide();
				makeMenu2(email.value);
			} else if ("captcha_sitekey" in e && typeof e.captcha_sitekey === "string") {
				if (area) {
					eval("hcaptcha.reset()");
				} else {
					area = document.createElement("div");
					opt.addHTMLArea(area);
					const capty = document.createElement("div");
					capty.classList.add("h-captcha");

					capty.setAttribute("data-sitekey", e.captcha_sitekey);
					const script = document.createElement("script");
					script.src = "https://js.hcaptcha.com/1/api.js";
					area.append(script);
					area.append(capty);
				}
			}
		},
		{
			fetchURL: info.api + "/auth/forgot",
			method: "POST",
			headers: {
				"Content-Type": "application/json",
			},
		},
	);
	const email = opt.addTextInput(I18n.htmlPages.emailField(), "login");
	opt.addPreprocessor((e) => {
		if (area) {
			try {
				//@ts-expect-error
				e.captcha_key = area.children[1].children[1].value;
			} catch (e) {
				console.error(e);
			}
		}
	});
	d.show(false);
}
if (window.location.pathname.startsWith("/reset"))
	if (
		window.location.href.split("#").length == 2 &&
		new URLSearchParams(window.location.href.split("#")[1]).has("token")
	) {
		makeMenu2();
	} else {
		makeMenu1();
	}
