Source: search.js

/**
 * @module search
 * @description
 * Handles search functionality, including query processing and displaying results.
 * Matches user queries against films and series and updates the UI with results.
 */

/**
 * Handles the global search input, processes the query, matches it against films and series,
 * and displays the results in the search section.
 *
 * @function
 * @returns {void}
 */
function handleSearch() {
  const query = searchInput.value.trim().toLowerCase();

  if (!query) {
    document.getElementById("searchResults").innerHTML = "";
    return;
  }

  const filmResults = Object.values(filmsData).filter(
    (item) =>
      item.title.toLowerCase().includes(query) ||
      (item.description && item.description.toLowerCase().includes(query)) ||
      (item.genres &&
        item.genres.some((genre) => genre.toLowerCase().includes(query))) ||
      (item.directors &&
        item.directors.some((director) =>
          director.toLowerCase().includes(query)
        )) ||
      (item.stars &&
        item.stars.some((star) => star.toLowerCase().includes(query)))
  );

  const seriesResults = Object.values(seriesData).filter(
    (item) =>
      item.title.toLowerCase().includes(query) ||
      (item.description && item.description.toLowerCase().includes(query)) ||
      (item.genres &&
        item.genres.some((genre) => genre.toLowerCase().includes(query))) ||
      (item.creators &&
        item.creators.some((creator) =>
          creator.toLowerCase().includes(query)
        )) ||
      (item.stars &&
        item.stars.some((star) => star.toLowerCase().includes(query)))
  );

  const allResults = [...filmResults, ...seriesResults];

  if (currentSection === "search") {
    displayContent(allResults, "searchResults");
  }

  if (currentSection !== "search" && allResults.length > 0) {
    showSection("search");
    setActiveNavLink(document.querySelector('[data-section="search"]'));
    displayContent(allResults, "searchResults");
  }
}