// app.jsx — 页面装配
// 七个 HTML 壳只差 <body data-page="…">,由这里挑对应的页面组件;
// 语言状态全站共用(localStorage `hm-lang`,也认 ?lang=en)。

function App() {
  const page = document.body.dataset.page || 'home';

  const [lang, setLang] = React.useState(function () {
    try {
      var q = new URLSearchParams(location.search).get('lang');
      if (q === 'zh' || q === 'en') return q;
      var saved = localStorage.getItem('hm-lang');
      if (saved === 'zh' || saved === 'en') return saved;
    } catch (e) {}
    return (navigator.language || '').toLowerCase().indexOf('zh') === 0 ? 'zh' : 'en';
  });
  React.useEffect(function () {
    document.documentElement.lang = (lang === 'zh') ? 'zh-CN' : 'en';
    try { localStorage.setItem('hm-lang', lang); } catch (e) {}
  }, [lang]);

  // 三维首屏只在首页;12 秒没就绪就退回影像首屏 —— 导航配色必须跟首屏一致
  const [heroMode, setHeroMode] = React.useState(page === 'home' ? 'wait' : 'photo');
  React.useEffect(function () {
    if (page !== 'home') return;
    var alive = true;
    var to = new Promise(function (_, rej) { setTimeout(function () { rej(new Error('timeout')); }, 12000); });
    Promise.race([window.__viewerReady || Promise.reject(new Error('no-viewer')), to])
      .then(function () { if (alive) setHeroMode('3d'); })
      .catch(function () { if (alive) setHeroMode('photo'); });
    return function () { alive = false; };
  }, []);

  const PAGES = {
    home: HomePage, festival: FestivalPage, exhibitions: ExhibitionsPage, collection: CollectionPage,
    gallery: GalleryPage, about: AboutPage, visit: VisitPage
  };
  const Page = PAGES[page] || HomePage;

  return (
    <>
      {/* 首页外观轮播与 920 暗场页 → 白 logo,滚过首屏再变纸色;其余分页纸底 → 一开始就是墨色 */}
      <Nav lang={lang} setLang={setLang} page={page}
           paper={page !== 'home' && page !== 'festival'}
           solidAt={page === 'festival' ? 0.72 : 0.9} />
      <Page lang={lang} heroMode={heroMode} />
      <Footer lang={lang} />
    </>);
}

ReactDOM.createRoot(document.getElementById('root')).render(<App />);
