/* global React, PROFILE, Stamp, Uptime */

const { useState, useEffect, useRef } = React;

function TopBar({ active, onNavigate }) {
  const [open,   setOpen]   = useState(false);
  const [hidden, setHidden] = useState(false);
  const lastY = useRef(0);

  useEffect(() => {
    const onScroll = () => {
      const y = window.scrollY;
      if (y < 62) { setHidden(false); lastY.current = y; return; }
      const delta = y - lastY.current;
      if (delta >  8) { setHidden(true);  lastY.current = y; }
      if (delta < -8) { setHidden(false); lastY.current = y; }
    };
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);

  const link = (id, label) => {
    const handleClick = (e) => {
      e.preventDefault();
      setOpen(false);
      if (onNavigate) onNavigate(id);
    };
    return (
      <a href={`#${id}`}
         className={active === id ? "active" : ""}
         onClick={handleClick}>
        {label}
      </a>
    );
  };

  return (
    <header className={`topbar${hidden ? " topbar-hidden" : ""}`}>
      <div className="brand">
        <a href="#/" style={{ textDecoration: "none", color: "inherit" }}>
          <span className="sd">S/D</span>
        </a>
        <span style={{ color: "var(--ink-3)" }}>—</span>
        <Uptime />
      </div>
      <nav className={open ? "open" : ""}>
        {link("identity",   "Identity")}
        {link("projects",   "Projects")}
        {link("skills",     "Skills")}
        {link("experience", "Experience")}
        {link("contact",    "Contact")}
      </nav>
          <Stamp dot>{PROFILE.status}</Stamp>
      <button
        className={`hamburger${open ? " open" : ""}`}
        aria-label="Toggle menu"
        onClick={() => setOpen((v) => !v)}
      >
        <span /><span /><span />
      </button>
    </header>
  );
}

Object.assign(window, { TopBar });
