"use strict";

window.onload = async () => {
	const account = JSON.parse(localStorage.getItem("account"));
	const i = account.token;

	const api = (endpoint, data = {}) => {
		const promise = new Promise((resolve, reject) => {
			// Append a credential
			if (i) data.i = i;

			// Send request
			fetch(endpoint.indexOf("://") > -1 ? endpoint : `/api/${endpoint}`, {
				method: "POST",
				body: JSON.stringify(data),
				credentials: "omit",
				cache: "no-cache",
			})
				.then(async (res) => {
					const body = res.status === 204 ? null : await res.json();

					if (res.status === 200) {
						resolve(body);
					} else if (res.status === 204) {
						resolve();
					} else {
						reject(body.error);
					}
				})
				.catch(reject);
		});

		return promise;
	};

	const content = document.getElementById("content");

	document.getElementById("ls").addEventListener("click", () => {
		content.innerHTML = "";

		const lsEditor = document.createElement("div");
		lsEditor.id = "lsEditor";

		const adder = document.createElement("div");
		adder.classList.add("adder");
		const addKeyInput = document.createElement("input");
		const addValueTextarea = document.createElement("textarea");
		const addButton = document.createElement("button");
		addButton.textContent = "Add";
		addButton.addEventListener("click", () => {
			localStorage.setItem(addKeyInput.value, addValueTextarea.value);
			location.reload();
		});

		adder.appendChild(addKeyInput);
		adder.appendChild(addValueTextarea);
		adder.appendChild(addButton);
		lsEditor.appendChild(adder);

		for (let i = 0; i < localStorage.length; i++) {
			const k = localStorage.key(i);
			const record = document.createElement("div");
			record.classList.add("record");
			const header = document.createElement("header");
			header.textContent = k;
			const textarea = document.createElement("textarea");
			textarea.textContent = localStorage.getItem(k);
			const saveButton = document.createElement("button");
			saveButton.textContent = "Save";
			saveButton.addEventListener("click", () => {
				localStorage.setItem(k, textarea.value);
				location.reload();
			});
			const removeButton = document.createElement("button");
			removeButton.textContent = "Remove";
			removeButton.addEventListener("click", () => {
				localStorage.removeItem(k);
				location.reload();
			});
			record.appendChild(header);
			record.appendChild(textarea);
			record.appendChild(saveButton);
			record.appendChild(removeButton);
			lsEditor.appendChild(record);
		}

		content.appendChild(lsEditor);
	});
};
