'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);
	});
};