function addUploadHistory(fileID) {
	// Make sure the user is not logged in, for privacy. This keeps the
	// files uploaded while logged in and anonymously uploaded files
	// separated
	if (document.cookie.includes("pd_auth_key")) { return; }

	let uploads = localStorage.getItem("uploaded_files");
	if (uploads === null) { uploads = ""; }

	// Check if there are not too many values stored
	if (uploads.length > 3600) {
		// 3600 characters is enough to store 400 file IDs. If we exceed that
		// number we'll drop the last two items
		uploads = uploads.substring(
			uploads.indexOf(",") + 1
		).substring(
			uploads.indexOf(",") + 1
		);
	}

	// Save the new ID
	localStorage.setItem("uploaded_files", fileID + "," + uploads);
}

function printDate(date, hours, minutes, seconds) {
	let dateStr = date.getFullYear()
		+ "-" + ("00" + (date.getMonth() + 1)).slice(-2)
		+ "-" + ("00" + date.getDate()).slice(-2)

	if (hours) { dateStr += " " + ("00" + date.getHours()).slice(-2) }
	if (minutes) { dateStr += ":" + ("00" + date.getMinutes()).slice(-2) }
	if (seconds) { dateStr += ":" + ("00" + date.getMinutes()).slice(-2) }
	return dateStr
}

function copyText(text) {
	// Create a textarea to copy the text from
	let ta = document.createElement("textarea");
	ta.setAttribute("readonly", "readonly")
	ta.style.position = "absolute";
	ta.style.left = "-9999px";
	ta.value = text; // Put the text in the textarea

	// Add the textarea to the DOM so it can be seleted by the user
	document.body.appendChild(ta);
	ta.select() // Select the contents of the textarea
	let success = document.execCommand("copy"); // Copy the selected text
	document.body.removeChild(ta); // Remove the textarea
	return success;
}

function domainURL() {
	let url = window.location.protocol + "//" + window.location.hostname;
	if (window.location.port != "") {
		url = url + ":" + window.location.port;
	}
	return url;
}

function formatNumber(amt, precision) {
	if (precision < 3) { precision = 3; }
	if (amt >= 1e6) {
		return (amt / 1e6).toPrecision(precision) + "M";
	} else if (amt >= 1e3) {
		return (amt / 1e3).toPrecision(precision) + "k";
	}
	return amt
}

function formatThousands(x) {
	// Inject a space every three digits
	return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}

function formatDataVolume(amt, precision) {
	if (precision < 3) { precision = 3; }
	if (amt >= 1e18) {
		return (amt / 1e18).toPrecision(precision) + " EB";
	} else if (amt >= 1e15) {
		return (amt / 1e15).toPrecision(precision) + " PB";
	} else if (amt >= 1e12) {
		return (amt / 1e12).toPrecision(precision) + " TB";
	} else if (amt >= 1e9) {
		return (amt / 1e9).toPrecision(precision) + " GB";
	} else if (amt >= 1e6) {
		return (amt / 1e6).toPrecision(precision) + " MB";
	} else if (amt >= 1e3) {
		return (amt / 1e3).toPrecision(precision) + " kB";
	}
	return Math.floor(amt) + " B"
}

const second = 1000
const minute = second * 60
const hour = minute * 60
const day = hour * 24

function formatDuration(ms) {
	let res = ""
	if (ms >= day) { res += Math.floor(ms / day) + "d " }
	if (ms >= hour) { res += Math.floor((ms % day) / hour) + "h " }
	if (ms >= minute) { res += Math.floor((ms % hour) / minute) + "m " }
	return res + ((ms % minute) / second).toFixed(3) + "s"
}
