// Header + announcement bar + Shop mega menu
// ----------------------------------------------------------------------------
// Nav structure from Inga's site notes (2026-06-12):
//   Shop (mega menu: Anlass / Geschmackswelten / Getränkearten / Mehr)
//   Produzenten · Stories · Über uns
// The mega menu links navigate to the Collection page with a preset filter
// (onNav("collection", { anlass: "Apéro" }) etc.) — so every entry leads to
// a genuinely different place, not just "the shop" (the old complaint).
// Layer 3 (Getränkearten) is derived live from the productTypes present in
// the Shopify catalog — nothing hardcoded, renaming the Produkttyp in
// Shopify renames the menu entry.

function Header({ onNav, view, cartCount, cartBump, onCartOpen, onMenu, onSearch, onAccount }) {
  const [megaOpen, setMegaOpen] = useState(false);
  const closeTimer = useRef(null);

  // Hover-intent: opening is instant, closing is delayed ~160ms so the
  // cursor can travel from the nav item into the panel without it closing.
  const openMega  = () => { clearTimeout(closeTimer.current); setMegaOpen(true); };
  const closeMega = () => {
    clearTimeout(closeTimer.current);
    closeTimer.current = setTimeout(() => setMegaOpen(false), 160);
  };
  useEffect(() => () => clearTimeout(closeTimer.current), []);

  // Close on Escape for keyboard users.
  useEffect(() => {
    if (!megaOpen) return;
    const onKey = (e) => { if (e.key === "Escape") setMegaOpen(false); };
    document.addEventListener("keydown", onKey);
    return () => document.removeEventListener("keydown", onKey);
  }, [megaOpen]);

  const go = (v, opts) => { setMegaOpen(false); onNav(v, opts); };

  // Layer 3: live from the catalog. Sorted, deduped, "Sets" pushed last.
  const drinkTypes = Array.from(new Set((window.PRODUCTS || []).map((p) => p.category).filter(Boolean)))
    .sort((a, b) => (a === "Sets") - (b === "Sets") || a.localeCompare(b, "de"));

  const link = (id, label) => (
    <a className={view === id ? "on" : ""} onClick={() => go(id)}>{label}</a>
  );

  return (
    <header>
      <div className="announce">
        <span className="announce__spacer" aria-hidden="true"></span>
        <span>{t("announce.shipping")}</span>
        <a className="announce__b2b" onClick={() => go("geschaeftskunden")}>{t("announce.b2b")} →</a>
      </div>
      <div className="hdr">
        <div className="wrap hdr__bar">
          <button className="hamburger" aria-label="Menü" onClick={onMenu}><Icon name="menu" size={22} /></button>
          <div className="hdr__logo" onClick={() => go("home")} role="button" aria-label="Zur Startseite">
            <Logo className="hdr__logo-mark" />
          </div>
          <nav className="hdr__nav">
            <a
              className={`hdr__shop-link${view === "collection" ? " on" : ""}${megaOpen ? " open" : ""}`}
              onClick={() => go("collection")}
              onPointerEnter={(e) => { if (e.pointerType === "mouse") openMega(); }}
              onPointerLeave={(e) => { if (e.pointerType === "mouse") closeMega(); }}
              aria-expanded={megaOpen}
              aria-haspopup="true"
            >
              {t("nav.shop")} <Icon name="chevron-down" size={14} />
            </a>
            {link("produzenten", t("nav.producers"))}
            {link("stories", t("nav.stories"))}
            {link("about", t("nav.about"))}
          </nav>
          <div className="hdr__actions">
            <div className="lang-switch" role="group" aria-label="Sprache">
              <button className={window.AG_LANG === "de" ? "on" : ""} onClick={() => window.setLang("de")}>DE</button>
              <span aria-hidden="true">/</span>
              <button className={window.AG_LANG === "en" ? "on" : ""} onClick={() => window.setLang("en")}>EN</button>
            </div>
            <button className="iconbtn" aria-label={t("nav.search")} onClick={onSearch}><Icon name="search" size={20} /></button>
            <button className="iconbtn" aria-label={t("nav.account")} onClick={onAccount}><Icon name="user" size={20} /></button>
            <button className="iconbtn" aria-label="Warenkorb" onClick={onCartOpen}>
              <Icon name="shopping-bag" size={20} />
              {cartCount > 0 && <span className={`count${cartBump ? " bump" : ""}`}>{cartCount}</span>}
            </button>
          </div>
        </div>
      </div>

      {/* ---- Shop mega menu ------------------------------------------- */}
      <div
        className={`mega${megaOpen ? " open" : ""}`}
        onPointerEnter={(e) => { if (e.pointerType === "mouse") openMega(); }}
        onPointerLeave={(e) => { if (e.pointerType === "mouse") closeMega(); }}
        aria-hidden={!megaOpen}
      >
        <div className="wrap mega__grid">
          <div className="mega__col">
            <h5>{t("mega.anlass")}</h5>
            <ul>
              {TAXONOMY.anlass.map((a) => (
                <li key={a.key}>
                  <a onClick={() => go("collection", { anlass: a.key })}>{taxLabel("anlass", a.key)}</a>
                </li>
              ))}
            </ul>
          </div>
          <div className="mega__col">
            <h5>{t("mega.geschmack")}</h5>
            <ul>
              {TAXONOMY.geschmack.map((g) => (
                <li key={g.key}>
                  <a onClick={() => go("collection", { geschmack: g.key })}>{taxLabel("geschmack", g.key)}</a>
                </li>
              ))}
            </ul>
          </div>
          <div className="mega__col">
            <h5>{t("mega.art")}</h5>
            <ul>
              {drinkTypes.map((d) => (
                <li key={d}>
                  <a onClick={() => go("collection", { art: d })}>{d}</a>
                </li>
              ))}
            </ul>
          </div>
          <div className="mega__col">
            <h5>{t("mega.more")}</h5>
            <ul>
              <li><a onClick={() => go("collection")}>{t("mega.all")}</a></li>
              <li><a onClick={() => go("collection", { art: "Sets" })}>{t("mega.gifts")}</a></li>
              {/* Planned slots from Inga's notes (Abo, Gutscheine) — visible
                  in the structure but not clickable until the pages exist. */}
              <li><span className="mega__soon">{t("mega.abo")} <em>{t("mega.soon")}</em></span></li>
              <li><span className="mega__soon">{t("mega.vouchers")} <em>{t("mega.soon")}</em></span></li>
            </ul>
          </div>
        </div>
      </div>
    </header>
  );
}
Object.assign(window, { Header });
