import React from 'react';
import { Toaster } from 'react-hot-toast';
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';
import PlaylistDetailPage from './pages/SeedList/Recommend/PlaylistDetailPage';

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>
      <Toaster />
      <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="/playlist/:id" component={({ id }) => (
            <PrivateRoute component={() => <PlaylistDetailPage id={id} />} />
          )} />


          {/* 用户中心路由 */}
          <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;