/* =========================================================
   NOVA X — favoritos.js
   Lógica de favoritos con LocalStorage y página favoritos.html
   ========================================================= */

const NovaFavoritos = (() => {
  const STORAGE_KEY = "novax_favorites";

  function obtener() {
    try {
      return JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];
    } catch {
      return [];
    }
  }

  function guardar(lista) {
    localStorage.setItem(STORAGE_KEY, JSON.stringify(lista));
    actualizarBadge();
  }

  function esFavorito(id) {
    return obtener().includes(id);
  }

  function alternar(id) {
    let lista = obtener();
    if (lista.includes(id)) {
      lista = lista.filter((favId) => favId !== id);
    } else {
      lista.push(id);
    }
    guardar(lista);
    return lista.includes(id);
  }

  function actualizarBadge() {
    const total = obtener().length;
    document.querySelectorAll("[data-fav-count]").forEach((el) => {
      el.textContent = total;
      el.classList.toggle("is-visible", total > 0);
    });
  }

  function sincronizarBotones() {
    document.querySelectorAll("[data-fav-toggle]").forEach((btn) => {
      const id = btn.getAttribute("data-fav-toggle");
      btn.classList.toggle("is-active", esFavorito(id));
    });
  }

  async function renderPagina() {
    const contenedor = document.querySelector("[data-favorites-grid]");
    if (!contenedor) return;

    const ids = obtener();
    const productos = await NovaAPI.getProductos();
    const favoritos = productos.filter((p) => ids.includes(p.id));

    if (favoritos.length === 0) {
      contenedor.innerHTML = `
        <div class="empty-state">
          <div class="icon">🤍</div>
          <h3>Aún no tienes favoritos</h3>
          <p>Toca el corazón en cualquier producto para guardarlo aquí.</p>
          <a href="productos.html" class="btn btn-primary">Explorar catálogo</a>
        </div>`;
      return;
    }

    contenedor.innerHTML = favoritos.map((p) => NovaProductos.tarjetaProducto(p)).join("");
    NovaProductos.vincularEventosTarjetas(contenedor);
  }

  function init() {
    actualizarBadge();
    if (document.querySelector("[data-favorites-grid]")) {
      renderPagina();
    }
  }

  return { obtener, esFavorito, alternar, actualizarBadge, sincronizarBotones, renderPagina, init };
})();
