// export default App;

import { Route } from 'wouter';
import { Redirect } from 'wouter';
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 { UserProvider } from './context/UserContext';
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 PromotionsPage from './pages/PromotionsPage/PromotionsPage';
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 SimpleUploader from './pages/PublishSeed/SimpleUploader';
import UserInfo from './pages/UserInfo/UserInfo';
import UserLayout from './pages/UserCenter/UserLayout';

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

function App() {
  return (
    <UserProvider>
      <GroupProvider>
        <>
          <Route path="/" component={RedirectToAuth} />
          <Route path="/auth" component={AuthPage} />
          <Route path="/friend-moments" component={FriendMoments} />
          <Route path="/friend-moments/create" component={CreateMoment} />
          <Route path="/forum" component={ForumPage} />
          <Route path="/forum/post/:postId" component={PostDetailPage} />
          <Route path="/forum/create-post" component={CreatePostPage} />
          <Route path="/seed-list" component={SeedList} />
          <Route path="/publish-seed" component={PublishSeed} />
          {/* <Route path="/publish-seed" component={SimpleUploader} /> */}
          <Route path="/seed/:id" component={SeedDetail} />
          <Route path="/interest-groups" component={InterestGroup} />
          <Route path="/messages" component={MessagePage} />
          <Route path="/promotions" component={PromotionsPage} />
          <Route path="/level" component={LevelPage} />
          <Route path="/information/:userId" component={UserInfo} />


          {/* 用户中心嵌套路由模拟 */}
          <Route path="/user/profile" component={() => (
            <UserLayout><UserProfile /></UserLayout>
          )} />
          <Route path="/user/newbie-tasks" component={() => (
            <UserLayout><NewbieTasks /></UserLayout>
          )} />
          {/* <Route path="/user/dynamics" component={() => (
            <UserLayout><UserDynamics /></UserLayout>
          )} /> */}
          <Route path="/user/friends" component={() => (
            <UserLayout><UserFriends /></UserLayout>
          )} />
          <Route path="/user/collections" component={() => (
            <UserLayout><UserCollect /></UserLayout>
          )} />
          <Route path="/user/invite" component={() => (
            <UserLayout><UserInvite /></UserLayout>
          )} />
        </>
      </GroupProvider>
    </UserProvider>
  );
}

export default App;
