let toggleButton;
let icon;

function load() {
	"use strict";

	toggleButton = document.createElement("button");
	toggleButton.setAttribute("title", "Toggle dark mode");
	toggleButton.classList.add("dark-mode-toggle");
	icon = document.createElement("i");
	icon.classList.add("fa", darkModeState ? "fa-sun-o" : "fa-moon-o");
	toggleButton.appendChild(icon);
	document.body.prepend(toggleButton);

	// Listen for changes in the OS settings
	// addListener is used because older versions of Safari don't support addEventListener
	// prefersDarkQuery set in <head>
	if (prefersDarkQuery) {
		prefersDarkQuery.addListener(function (evt) {
			toggleDarkMode(evt.matches);
		});
	}

	// Initial setting depending on the prefers-color-mode or localstorage
	// darkModeState should be set in the document <head> to prevent flash
	if (darkModeState == undefined) darkModeState = false;
	toggleDarkMode(darkModeState);

	// Toggles the "dark-mode" class on click and sets localStorage state
	toggleButton.addEventListener("click", () => {
		darkModeState = !darkModeState;

		toggleDarkMode(darkModeState);
		localStorage.setItem("dark-mode", darkModeState);
	});
}

function toggleDarkMode(state) {
	document.documentElement.classList.toggle("dark-mode", state);
	document.documentElement.classList.toggle("light-mode", !state);
	icon.classList.remove("fa-sun-o");
	icon.classList.remove("fa-moon-o");
	icon.classList.add(state ? "fa-sun-o" : "fa-moon-o");
	darkModeState = state;
}

document.addEventListener("DOMContentLoaded", load);