/* =========================================================
   NOVA X — buscador.js
   Autocompletado en tiempo real por nombre, marca, categoría, tags
   ========================================================= */

const NovaBuscador = (() => {
  function coincide(producto, termino) {
    const campo = [producto.nombre, producto.marca, producto.categoria, producto.descripcion, ...(producto.tags || [])]
      .join(" ")
      .toLowerCase();
    return campo.includes(termino);
  }

  function itemResultado(p) {
    return `
      <a class="search-result-item" href="detalle.html?id=${p.id}">
        <img src="${p.imagenes[0]}" alt="">
        <div class="info">
          <strong>${p.nombre}</strong>
          <span>${p.marca} · ${NovaUtils.formatoPrecio(p.precio)}</span>
        </div>
      </a>`;
  }

  function init() {
    const input = document.querySelector("[data-search-input]");
    const resultsBox = document.querySelector("[data-search-results]");
    const form = document.querySelector("[data-search-form]");
    if (!input || !resultsBox) return;

    const buscar = NovaUtils.debounce(async () => {
      const termino = input.value.trim().toLowerCase();
      if (termino.length < 2) {
        resultsBox.classList.remove("is-open");
        resultsBox.innerHTML = "";
        return;
      }
      const productos = await NovaAPI.getProductos();
      const coincidencias = productos.filter((p) => coincide(p, termino)).slice(0, 6);

      resultsBox.innerHTML = coincidencias.length
        ? coincidencias.map(itemResultado).join("")
        : `<div class="search-empty">Sin resultados para "${input.value}"</div>`;
      resultsBox.classList.add("is-open");
    }, 220);

    input.addEventListener("input", buscar);
    input.addEventListener("focus", () => {
      if (resultsBox.innerHTML) resultsBox.classList.add("is-open");
    });

    document.addEventListener("click", (e) => {
      if (!resultsBox.contains(e.target) && e.target !== input) {
        resultsBox.classList.remove("is-open");
      }
    });

    form?.addEventListener("submit", (e) => {
      e.preventDefault();
      const termino = input.value.trim();
      if (termino) window.location.href = `productos.html?q=${encodeURIComponent(termino)}`;
    });
  }

  return { init };
})();
