// app.jsx — full routing, no demo bar
const { useState, useEffect } = React;

function App() {
  const [page,    setPage]    = useState("home");
  const [data,    setData]    = useState({});
  const [dataVer, setDataVer] = useState(0);
  const [isLoggedIn, setIsLoggedIn] = useState(() => { try { return !!localStorage.getItem('anifun_auth'); } catch { return false; } });

  const login  = () => { try { localStorage.setItem('anifun_auth','1'); } catch {} setIsLoggedIn(true); };
  const logout = () => { try { localStorage.removeItem('anifun_auth'); } catch {} setIsLoggedIn(false); };
  window.__anifun_login  = login;
  window.__anifun_logout = logout;

  const navigate = (p, d = {}) => {
    setPage(p);
    setData(d);
    window.scrollTo(0, 0);
    try { localStorage.setItem("anifun_nav", JSON.stringify({ page:p })); } catch {}
  };

  useEffect(() => {
    try {
      const saved = localStorage.getItem("anifun_nav");
      if (saved) { const { page:p } = JSON.parse(saved); if (p==="home") setPage(p); }
    } catch {}
  }, []);

  useEffect(() => {
    if (typeof window.loadAniListData === "function") {
      window.loadAniListData().then(()=>setDataVer(v=>v+1)).catch(()=>{});
    }
  }, []);

  const {
    Nav, Footer,
    // Core
    HomePage, AnimePage, WatchPage, BrowsePage, AuthPage,
    // Profile
    ProfilePage, ContinueWatchingPage, WatchlistPage, WatchHistoryPage, FavoritesPage, SearchResultsPage,
    // Settings
    AccountSettingsPage, ProfileSettingsPage, EmailSettingsPage, SecuritySettingsPage,
    LanguagePreferencesPage, ConnectionsPage, ParentalControlsPage, AccessibilitySettingsPage,
    ContentFilteringPage,
    // Browse variants
    SchedulePage,
    // Content
    VoiceActorsPage, VADetailPage, StudiosPage, StudioDetailPage,
    // New pages
    UpcomingPage, NewsDetailPage, ForumDetailPage, EpisodeDiscussionPage,
    NotificationsPage,
    WatchPartyBrowsePage, WatchPartyRoomPage,
    WatchlistHubPage,
    // Features
    NewsPage, ForumsPage, AnnouncementsPage, RegionSelectionPage, LanguageSelectionPage,
    HelpCenterPage, SubmitRequestPage,
    PrivacyPolicyPage, TermsOfServicePage, DmcaPage,
    NotFoundPage, ServerErrorPage, MaintenancePage,
    ForgotPasswordPage, ResetPasswordPage, EmailVerificationPage, TwoFactorAuthPage,
    // New forum pages
    GeneralDiscussionPage, EpisodeDiscussionBrowsePage, RecommendationsPage, FanArtPage, RandomAnimePage,
    ANIME_DATA,
  } = window;

  const noNav    = ["auth","forgot-pw","reset-pw","verify-email","2fa","maintenance"].includes(page);
  const noFooter = ["auth","forgot-pw","reset-pw","verify-email","2fa","maintenance","watch"].includes(page);
  const sample   = ANIME_DATA[0];

  const renderPage = () => {
    const d = data;
    switch (page) {
      // Core
      case "home":        return <HomePage navigate={navigate} dataVer={dataVer} key="home"/>;
      case "anime":       return <AnimePage anime={d.anime||sample} navigate={navigate} key={`anime-${(d.anime||sample).id}`}/>;
      case "watch":       return <WatchPage anime={d.anime||sample} episode={d.episode||1} navigate={navigate} key={`watch-${(d.anime||sample).id}-${d.episode||1}`}/>;
      case "browse":      return <BrowsePage navigate={navigate} key="browse"/>;
      case "upcoming":    return <UpcomingPage navigate={navigate} key="upcoming"/>;
      case "notifications":      return <NotificationsPage navigate={navigate} key="notifications"/>;
      case "watchlist":          return <WatchlistHubPage navigate={navigate} key="watchlist"/>;
      case "watch-parties":      return <WatchPartyBrowsePage navigate={navigate} key="watch-parties"/>;
      case "watch-party-room":   return <WatchPartyRoomPage party={d.party} navigate={navigate} key={`wpr-${d.party?.id||"new"}`}/>;
      case "auth":        return <AuthPage navigate={navigate} onLogin={()=>{ login(); navigate("home"); }} key="auth"/>;

      // Profile
      case "profile":     return <ProfilePage navigate={navigate} onLogout={()=>{ logout(); navigate("home"); }}/>;
      case "continue":    return <ContinueWatchingPage navigate={navigate}/>;
      case "history":     return <WatchHistoryPage navigate={navigate}/>;
      case "favorites":   return <FavoritesPage navigate={navigate}/>;
      case "search":      return <SearchResultsPage query={d.query} navigate={navigate}/>;

      // Settings
      case "settings":              return <AccountSettingsPage navigate={navigate}/>;
      case "settings-profile":      return <ProfileSettingsPage navigate={navigate}/>;
      case "settings-email":        return <EmailSettingsPage navigate={navigate}/>;
      case "settings-security":     return <SecuritySettingsPage navigate={navigate}/>;
      case "settings-language":     return <LanguagePreferencesPage navigate={navigate}/>;
      case "settings-connections":  return <ConnectionsPage navigate={navigate}/>;
      case "parental":              return <ParentalControlsPage navigate={navigate}/>;
      case "accessibility":         return <AccessibilitySettingsPage navigate={navigate}/>;
      case "content-filtering":     return <ContentFilteringPage navigate={navigate}/>;

      // Browse
      case "schedule":    return <SchedulePage navigate={navigate} dataVer={dataVer} key="schedule"/>;
      case "popular":     return <BrowsePage navigate={navigate} defaultTitle="Popular & Trending" key="popular"/>;

      // Content
      case "voice-actors":    return <VoiceActorsPage navigate={navigate}/>;
      case "va-detail":       return <VADetailPage vaId={d.vaId} navigate={navigate} key={`va-${d.vaId}`}/>;
      case "studios":         return <StudiosPage navigate={navigate}/>;
      case "studio-detail":   return <StudioDetailPage studio={d.studio} navigate={navigate} key={`studio-${d.studio}`}/>;

      // News / Forums
      case "news":            return <NewsPage navigate={navigate}/>;
      case "news-detail":     return <NewsDetailPage newsId={d.newsId} navigate={navigate} key={`news-${d.newsId}`}/>;
      case "forums":          return <ForumsPage navigate={navigate}/>;
      case "forum-detail":    return <ForumDetailPage threadId={d.threadId} navigate={navigate} key={`forum-${d.threadId}`}/>;
      case "announcements":   return <AnnouncementsPage navigate={navigate}/>;
      case "episode-discussion": return <EpisodeDiscussionPage anime={d.anime} episode={d.episode} navigate={navigate} key={`disc-${d.anime?.id}-${d.episode}`}/>;

      // New forum sections
      case "general-discussion":       return <GeneralDiscussionPage navigate={navigate} key="gd"/>;
      case "episode-discussion-browse":return <EpisodeDiscussionBrowsePage navigate={navigate} key="edb"/>;
      case "recommendations":          return <RecommendationsPage navigate={navigate} key="recs"/>;
      case "fanart":                   return <FanArtPage navigate={navigate} key="fanart"/>;
      case "random-anime":             return <RandomAnimePage navigate={navigate} key="random"/>;

      // Support
      case "help":        return <HelpCenterPage navigate={navigate}/>;
      case "support":     return <SubmitRequestPage navigate={navigate}/>;
      case "privacy":     return <PrivacyPolicyPage navigate={navigate}/>;
      case "terms":       return <TermsOfServicePage navigate={navigate}/>;
      case "dmca":        return <DmcaPage navigate={navigate}/>;
      case "region":      return <RegionSelectionPage navigate={navigate}/>;
      case "language-select": return <LanguageSelectionPage navigate={navigate}/>;

      // Auth extras
      case "forgot-pw":   return <ForgotPasswordPage navigate={navigate}/>;
      case "reset-pw":    return <ResetPasswordPage navigate={navigate}/>;
      case "verify-email":return <EmailVerificationPage navigate={navigate}/>;
      case "2fa":         return <TwoFactorAuthPage navigate={navigate}/>;

      // System
      case "500":         return <ServerErrorPage navigate={navigate}/>;
      case "maintenance": return <MaintenancePage/>;

      default:            return <NotFoundPage navigate={navigate}/>;
    }
  };

  return (
    <div style={{ minHeight:"100vh", background:"var(--bg)" }}>
      {!noNav && <Nav currentPage={page} navigate={navigate}/>}
      {renderPage()}
      {!noFooter && <Footer navigate={navigate} isLoggedIn={isLoggedIn}/>}
    </div>
  );
}

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