// GRIDSHIFT — main app shell

const Sidebar = ({ activePillar, onPillar, country, onCountry, newsOpen, setNewsOpen }) => {
  const op = COUNTRIES.find(c => c.id === country);
  return (
    <aside className="sidebar">
      {/* Brand */}
      <div className="brand">
        <div className="brand-mark">
          <BrandLogo />
        </div>
        <div>
          <div className="brand-name">
            GRID<span className="dot"></span>SHIFT
          </div>
          <div className="brand-sub">SF₆ Transition Portal</div>
        </div>
      </div>

      {/* Operator selector */}
      <div className="selector">
        <div className="selector-label">Countries</div>
        <select value={country} onChange={e => onCountry(e.target.value)}>
          {COUNTRIES.map(o => <option key={o.id} value={o.id}>{o.label}</option>)}
        </select>
        <div className="selector-meta">
          <span><b>{op.stations}</b> stations</span>
          <span><b>{op.mass.toLocaleString()}</b> kg SF₆</span>
        </div>
      </div>

      {/* Navigation pillars */}
      <div className="nav-group">
        <div className="nav-label">Navigation pillars</div>
        {PILLARS.map(p => {
          const Ico = PILLAR_ICONS[p.id];
          const active = activePillar === p.id;
          return (
            <a
              href={`#${p.id}`}
              key={p.id}
              className={`nav-item ${active ? "active" : ""}`}
              onClick={(e) => { e.preventDefault(); onPillar(p.id); }}
            >
              <span className="nav-icon" style={{background: active ? p.color : "var(--paper-2)", color: active ? "#fff" : p.color, border: active ? "none" : `1px solid ${p.color}33`}}>
                <Ico size={15} color={active ? "#fff" : p.color}/>
              </span>
              <span>{p.label}</span>
              <span className="nav-step">{p.step}</span>
            </a>
          );
        })}
      </div>

      <div className="sidebar-spacer"></div>

      {/* Footer nav */}
      <div className="sidebar-foot">
        <a className="nav-item" href="#partners" onClick={(e) => { e.preventDefault(); onPillar("partners"); }}>
          <span className="nav-icon"><IconHandshake size={14} color="var(--fg-2)"/></span>
          <span>Partner ecosystem</span>
          <span className="nav-step">19</span>
        </a>
                <a className="nav-item" href="methodology.html" target="_blank" rel="noreferrer">
          <span className="nav-icon"><IconChart size={14} color="var(--fg-2)"/></span>
          <span>Methodology &amp; sources</span>
          <span className="nav-step">↗</span>
        </a>
        <a className="nav-item" href="#" onClick={e => e.preventDefault()}>
          <span className="nav-icon"><IconChat size={14} color="var(--fg-2)"/></span>
          <span>Give feedback</span>
          <span className="nav-step">↗</span>
        </a>

        <div className="news-toggle" onClick={() => setNewsOpen(!newsOpen)}>
          <span style={{display: "inline-flex", alignItems: "center", gap: 10}}>
            <IconNews size={14} color="var(--heat-green-dim)"/>
            Latest news
          </span>
          <span className="pill">{NEWS.length}</span>
        </div>

        {newsOpen && (
          <div className="news-drawer">
            {NEWS.map((n, i) => (
              <div className="news-item" key={i}>
                <div className="date">{n.date}</div>
                <div className="t">{n.t}</div>
              </div>
            ))}
          </div>
        )}

        <div className="sidebar-meta">
          Hosted by <b>CTCN / UNEP</b> + <b>NDE Germany / HEAT</b><br/>
          Königstein im Taunus · Data v2.5 · build 26.05.17
        </div>
      </div>
    </aside>
  );
};

const Topbar = ({ activePillar }) => {
  const p = PILLARS.find(x => x.id === activePillar);
  return (
    <div className="topbar">
      <div className="breadcrumb">
        <span>Portal</span>
        <span className="sep">/</span>
        <span>Pillar {p.step}</span>
        <span className="sep">/</span>
        <span className="now">{p.label}</span>
      </div>
      <div className="topbar-meta">
        <span className="live"><span className="live-dot"></span>Live data · 09:42 CEST</span>
        <span className="chip">Preliminary</span>
        <a className="btn-share" style={{textDecoration:"none"}} href="methodology.html" target="_blank" rel="noreferrer">Methodology ↗</a>
      </div>
    </div>
  );
};

const Footer = () => (
  <div className="foot">
    <div>
      <b>GRIDSHIFT</b> · SF₆ Transition Portal · co-hosted by <b>CTCN / UNEP</b> and <b>NDE Germany / HEAT</b> · linked to IEA RETA + CTCN SF₆ Knowledge Hub
    </div>
    <div>© 2026 HEAT GmbH · Königstein im Taunus · v2.4.1</div>
  </div>
);

const App = () => {
  const [activePillar, setActivePillar] = React.useState("strategic");
  const [country, setCountry] = React.useState("sen");
  const [newsOpen, setNewsOpen] = React.useState(false);
  const mainRef = React.useRef(null);

  const onPillar = (id) => {
    setActivePillar(id);
    // scroll main to anchor
    requestAnimationFrame(() => {
      const el = document.getElementById(id);
      if (el && mainRef.current) {
        const top = el.offsetTop - 0;
        mainRef.current.scrollTo({ top, behavior: "smooth" });
      }
    });
  };

  // observe pillars for scroll-based active state
  React.useEffect(() => {
    const main = mainRef.current;
    if (!main) return;
    const anchors = PILLARS.map(p => document.getElementById(p.id)).filter(Boolean);
    const onScroll = () => {
      const top = main.scrollTop + 120;
      let current = anchors[0]?.id || "strategic";
      for (const a of anchors) {
        if (a.offsetTop <= top) current = a.id;
      }
      setActivePillar(prev => prev === current ? prev : current);
    };
    main.addEventListener("scroll", onScroll, { passive: true });
    return () => main.removeEventListener("scroll", onScroll);
  }, []);

  return (
    <div className="app">
      <Sidebar
        activePillar={activePillar}
        onPillar={onPillar}
        country={country}
        onCountry={setCountry}
        newsOpen={newsOpen}
        setNewsOpen={setNewsOpen}
      />
      <main className="main" ref={mainRef}>
        <Topbar activePillar={activePillar} />
        <Strategic country={country} />
        <Inventories country={country} />
        <Scenarios country={country} />
        <Plans country={country} />
        <Partners />
        <Footer />
      </main>
    </div>
  );
};

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<App />);
