// iConference website — app shell
const { useState: useStateApp, useEffect: useEffectApp } = React;

function icInitialLang(def) {
  try {
    const u = new URLSearchParams(location.search).get("lang");
    if (u === "de" || u === "en") return u;
  } catch (e) {}
  return def || "de";
}

// Datum für News-Karten: immer das volle Datum (kein Heute/Gestern), konsistent mit dem Archiv.
function icDate(iso, lang) {
  if (!iso) return "";
  const d = new Date(iso + "T00:00:00");
  if (isNaN(d)) return iso;
  return d.toLocaleDateString(lang === "de" ? "de-CH" : "en-GB", { day: "numeric", month: "short", year: "numeric" });
}

function App() {
  const [lang, setLang] = useStateApp(() => icInitialLang("de"));
  const [demo, setDemo] = useStateApp(false);
  const [newsRaw, setNewsRaw] = useStateApp(null);
  const t = window.COPY[lang];

  useEffectApp(() => { if (window.lucide) window.lucide.createIcons(); }, [lang, demo, newsRaw]);
  useEffectApp(() => { document.documentElement.lang = lang; }, [lang]);
  // News aus news.json laden; bei Fehler bleibt newsRaw null → Fallback auf copy.jsx-Platzhalter.
  useEffectApp(() => {
    fetch("news.json", { cache: "no-store" })
      .then((r) => (r.ok ? r.json() : Promise.reject(r.status)))
      .then((data) => { if (Array.isArray(data) && data.length) setNewsRaw(data); })
      .catch(() => {});
  }, []);
  // SPA-Fix: Aufruf mit #anchor (z.B. „Zurück zur Website" → #contact) springt zum Ziel,
  // sobald es gerendert ist; läuft nach dem News-Load erneut und korrigiert den Versatz.
  useEffectApp(() => {
    const id = (location.hash || "").slice(1);
    if (!id) return;
    const el = document.getElementById(id);
    if (el) el.scrollIntoView({ behavior: "instant", block: "start" });
  }, [newsRaw]);

  const sortedNews = (newsRaw && newsRaw.length)
    ? [...newsRaw].sort((a, b) => (b.published || b.date || "").localeCompare(a.published || a.date || ""))
    : null;
  const newsItems = sortedNews
    ? sortedNews.map((it) => ({ key: it.id || it.h.de, tag: it.tag[lang], date: icDate(it.published || it.date, lang), h: it.h[lang], p: it.p[lang], source: it.source }))
    : t.news.items.map((it) => ({ key: it.h, ...it }));

  return (
    <React.Fragment>
      <Nav lang={lang} setLang={setLang} onDemo={() => setDemo(true)} t={t} />
      <Hero t={t} lang={lang} onDemo={() => setDemo(true)} />
      <Ribbon t={t} />
      <Areas t={t} lang={lang} onDemo={() => setDemo(true)} />
      <Framework t={t} lang={lang} />
      <RagSection t={t} lang={lang} />
      <Stance t={t} />
      <Why t={t} />
      <AboutSection t={t} />
      <NewsSection t={t} items={newsItems} lang={lang} />
      <CTA t={t} onDemo={() => setDemo(true)} />
      <Footer t={t} lang={lang} onDemo={() => setDemo(true)} />
      {demo && <DemoModal t={t} onClose={() => setDemo(false)} />}
    </React.Fragment>
  );
}

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