import React from 'react';
import { Route, useLocation } from 'wouter';
import { UserProvider, useUser } from './context/UserContext';

import AuthPage from './pages/AuthPage/AuthPage';
import HomePage from './pages/HomePage';
import FriendMoments from './pages/FriendMoments/FriendMoments';
import ForumPage from './pages/Forum/posts-main/ForumPage';
import SeedList from './pages/SeedList/SeedList';
import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage';
import { GroupProvider } from './context/useGroupStore';
import PublishSeed from './pages/PublishSeed/PublishSeed';
import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail';
import InterestGroup from './pages/InterestGroup/InterestGroup';
import UserProfile from './pages/UserCenter/UserProfile';
import CreatePostPage from './pages/Forum/posts-create/CreatePostPage';
import MessagePage from './pages/MessagePage/MessagePage';
import CreateMoment from './pages/FriendMoments/CreateMoment';
// import LevelPage from './pages/LevelPage/LevelPage';
import NewbieTasks from './pages/UserCenter/NewbieTasks';
import LevelPage from './pages/LevelPage/LevelPage';
// import NewbieTasks from './pages/UserCenter/NewbieTasks';
import UserDynamics from './pages/UserCenter/UserDynamics';
import UserFriends from './pages/UserCenter/UserFriends';
import UserCollect from './pages/UserCenter/UserCollect';
import UserInvite from './pages/UserCenter/UserInvite';
import UserInfo from './pages/UserInfo/UserInfo';
import UserLayout from './pages/UserCenter/UserLayout';
import NewUserGuide from './pages/NewUserGuide/NewUserGuide';
import Recharge from './pages/Recharge/Recharge';

function RedirectToAuth() {
  if (typeof window !== 'undefined') {
    window.location.replace('/auth');
  }
  return null;
}

// 私有路由保护组件
function PrivateRoute({ component: Component }) {
  const [location, setLocation] = useLocation();
  const { user, loading } = useUser();

  if (loading) {
    return <div>加载中...</div>;
  }

  if (!user) {
    setLocation('/auth');
    return null;
  }

  return <Component />;
}

function App() {
  return (
    <UserProvider>
      <GroupProvider>
        <>
          {/* 公开路由 */}
          <Route path="/auth" component={AuthPage} />

          {/* 根路径跳转到登录页 */}
          <Route path="/" component={() => <RedirectToAuth />} />

          {/* 私有路由用 PrivateRoute 包裹 */}
          <Route path="/friend-moments" component={() => <PrivateRoute component={FriendMoments} />} />
          <Route path="/friend-moments/create" component={() => <PrivateRoute component={CreateMoment} />} />
          <Route path="/forum" component={() => <PrivateRoute component={ForumPage} />} />
          <Route path="/forum/post/:postId" component={({ postId }) => <PrivateRoute component={() => <PostDetailPage postId={postId} />} />} />
          <Route path="/forum/create-post" component={() => <PrivateRoute component={CreatePostPage} />} />
          <Route path="/seed-list" component={() => <PrivateRoute component={SeedList} />} />
          <Route path="/publish-seed" component={() => <PrivateRoute component={PublishSeed} />} />
          <Route path="/seed/:id" component={({ id }) => <PrivateRoute component={() => <SeedDetail id={id} />} />} />
          <Route path="/interest-groups" component={() => <PrivateRoute component={InterestGroup} />} />
          <Route path="/messages" component={() => <PrivateRoute component={MessagePage} />} />
          {/* <Route path="/level" component={() => <PrivateRoute component={LevelPage} />} /> */}
          <Route path="/information/:userId" component={({ userId }) => <PrivateRoute component={() => <UserInfo userId={userId} />} />} />
          <Route path="/new-user-guide" component={() => <PrivateRoute component={NewUserGuide} />} />

          {/* 用户中心路由 */}
          <Route path="/user/profile" component={() => (
            <PrivateRoute component={() => <UserLayout><UserProfile /></UserLayout>} />
          )} />
          {/* <Route path="/user/newbie-tasks" component={() => (
            <PrivateRoute component={() => <UserLayout><NewbieTasks /></UserLayout>} />
          )} /> */}
          <Route path="/user/dynamics" component={() => (
            <PrivateRoute component={() => <UserLayout><UserDynamics /></UserLayout>} />
          )} />
          <Route path="/user/friends" component={() => (
            <PrivateRoute component={() => <UserLayout><UserFriends /></UserLayout>} />
          )} />
          <Route path="/user/collections" component={() => (
            <PrivateRoute component={() => <UserLayout><UserCollect /></UserLayout>} />
          )} />
          <Route path="/user/invite" component={() => (
            <PrivateRoute component={() => <UserLayout><UserInvite /></UserLayout>} />
          )} />
          <Route path ="user/recharge" component={() => (
            <PrivateRoute component={() => <UserLayout><Recharge /></UserLayout>} />
          )} />

             </>
      </GroupProvider>
    </UserProvider>
  );
}

export default App;