import { Elevent } from "/assets/js/modules/npm/Elevent.mjs";

const CLASSNAME_SEARCHBOX_ACTIVE = "searchboxActive";

// Handle search box open/close buttons
{
	// Open search box
	new Elevent("click", document.querySelector(".searchbox-open"), () => {
		document.querySelector("header").classList.add(CLASSNAME_SEARCHBOX_ACTIVE);
		// Select searchbox inner input element
		document.querySelector("searchbox input").focus();
	});

	// Close searchbox
	new Elevent("click", document.querySelector(".searchbox-close"), () => {
		// Disable search button interaction while animation is running
		// This is required to prevent conflicts with the :hover "peak" transformation
		const searchButtonElement = document.querySelector("header button.search");
		const transformDuration = parseInt(window.getComputedStyle(searchButtonElement).getPropertyValue("--transform-duration"));
		searchButtonElement.style.setProperty("pointer-events", "none");

		document.querySelector("header").classList.remove(CLASSNAME_SEARCHBOX_ACTIVE);

		// Wait for the transform animation to finish
		setTimeout(() => searchButtonElement.style.removeProperty("pointer-events"), transformDuration);
	});
}

// Root shell navigation event handlers
{
	// On all top shell navigations
	new Elevent(vv.Navigation.EVENTS.STARTED, vv.Navigation.rootShellElement, () => {
		// Close searchbox on top shell navigations
		document.querySelector("header").classList.remove(CLASSNAME_SEARCHBOX_ACTIVE);
	});
}

// Handle search logic
{
	const searchResultsElement = document.querySelector("search-results");

	document.querySelector("header input[type='search']").addEventListener("input", (event) => {
		// Debounce user input
		clearTimeout(event.target._throttle);
		event.target._throttle = setTimeout(() => {
			// Navigate search-results element on user input
			new vv.Navigation(`/search?q=${event.target.value}`).navigate(searchResultsElement);
		}, 100);
	});
}