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/NewUserGuide/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 UserRecharge from './pages/UserCenter/UserRecharge';
import GroupDetail from './pages/InterestGroup/GroupDetail';

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="/group/:groupId" component={({ groupId }) => <PrivateRoute component={() => <GroupDetail groupId={groupId} />} />} />

          {/* 用户中心路由 */}
          <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><UserRecharge /></UserLayout>} />
          )} />
        </>
      </GroupProvider>
    </UserProvider>
  );
}

export default App;