// ============ 主 App：路由 ============
const { useState, useEffect } = React;
const { HashRouter, Routes, Route, Navigate } = window.RR;

// ============ 首页路由（访问码 → 用户中心） ============
const STORAGE_VERSION = 'v4'; // 数据结构变化时递增，自动失效旧缓存

function HomeRoute() {
  const [member, setMember] = useState(null);
  const [subscriptions, setSubscriptions] = useState([]);
  const [downloads, setDownloads] = useState([]);
  const [tutorials, setTutorials] = useState([]);
  const [hydrated, setHydrated] = useState(false);

  useEffect(() => {
    const version = sessionStorage.getItem('storage_version');
    if (version !== STORAGE_VERSION) {
      // 版本不匹配，清除旧缓存
      sessionStorage.removeItem('access_verified');
      sessionStorage.removeItem('member_info');
      sessionStorage.removeItem('member_subscriptions');
      sessionStorage.removeItem('member_downloads');
      sessionStorage.removeItem('member_tutorials');
      setHydrated(true);
      return;
    }
    const verified = sessionStorage.getItem('access_verified');
    const memberStr = sessionStorage.getItem('member_info');
    const subStr = sessionStorage.getItem('member_subscriptions');
    const dlStr = sessionStorage.getItem('member_downloads');
    const tutStr = sessionStorage.getItem('member_tutorials');
    if (verified === 'true' && memberStr && subStr) {
      try {
        setMember(JSON.parse(memberStr));
        setSubscriptions(JSON.parse(subStr));
        if (dlStr) setDownloads(JSON.parse(dlStr));
        if (tutStr) setTutorials(JSON.parse(tutStr));
      } catch (e) {
        // ignore
      }
    }
    setHydrated(true);
  }, []);

  const handleVerified = (m, subs, dls, tuts) => {
    sessionStorage.setItem('storage_version', STORAGE_VERSION);
    sessionStorage.setItem('access_verified', 'true');
    sessionStorage.setItem('member_info', JSON.stringify(m));
    sessionStorage.setItem('member_subscriptions', JSON.stringify(subs));
    if (dls) sessionStorage.setItem('member_downloads', JSON.stringify(dls));
    if (tuts) sessionStorage.setItem('member_tutorials', JSON.stringify(tuts));
    setMember(m);
    setSubscriptions(subs);
    setDownloads(dls || []);
    setTutorials(tuts || []);
  };

  const handleLogout = () => {
    sessionStorage.removeItem('access_verified');
    sessionStorage.removeItem('member_info');
    sessionStorage.removeItem('member_subscriptions');
    sessionStorage.removeItem('member_downloads');
    sessionStorage.removeItem('member_tutorials');
    setMember(null);
    setSubscriptions([]);
    setDownloads([]);
    setTutorials([]);
  };

  if (!hydrated) return null;

  if (!member) {
    return <window.LandingPage onVerified={handleVerified} />;
  }

  return (
    <window.UserDashboard
      member={member}
      subscriptions={subscriptions}
      downloads={downloads}
      tutorials={tutorials}
      onLogout={handleLogout}
    />
  );
}

// ============ 根组件 ============
function App() {
  return (
    <>
      <HashRouter>
        <Routes>
          <Route path="/" element={<HomeRoute />} />
          <Route path="/admin" element={<window.AdminPage />} />
          <Route path="*" element={<HomeRoute />} />
        </Routes>
      </HashRouter>
      <window.ToastContainer />
    </>
  );
}

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