import React from 'react';
import {
  Routes,
  Route,
  Navigate,
} from 'react-router-dom';
import AdminPage from '../components/Admin';
import UserManagement from '../components/UserManagement';
import LogsDashboard from '../components/LogsDashboard';
import SuperAdmin from '../components/SuperAdmin';

import CreatePost     from '../components/CreatePost'      // src/components/CreatePost.jsx
import HomeFeed       from '../components/HomeFeed'        // src/components/HomeFeed.jsx
import PlaceholderPage from '../components/PlaceholderPage'// src/components/PlaceholderPage.jsx
import UploadPage     from '../components/UploadPage'      // src/components/UploadPage.jsx


import LoginPage from '../pages/LoginPage/LoginPage';
import RegisterPage from '../pages/RegisterPage/RegisterPage';
import ForgotPasswordPage from '../pages/ForgotPasswordPage/ForgotPasswordPage';
import TestDashboard from '../pages/TestDashboard/TestDashboard';

export default function AppRoutes() {
  return (
    <Routes>
      <Route path="/posts/new" element={<CreatePost />} />
    
      <Route path="/home"      element={<HomeFeed />} />

      <Route path="/notebooks" element={<PlaceholderPage pageId="notebooks" />} />
      <Route path="/activity"  element={<PlaceholderPage pageId="activity"  />} />
      <Route path="/notes"     element={<PlaceholderPage pageId="notes"     />} />
      <Route path="/creator"   element={<PlaceholderPage pageId="creator"   />} />
      <Route path="/journal"   element={<PlaceholderPage pageId="journal"   />} />

      <Route path="/dashboard/*" element={<UploadPage />} />

      {/* 根路径重定向到 dashboard */}
      {/* <Route path="/" element={<Navigate to="/dashboard/overview" replace />} /> */}

      <Route path="/" element={<LoginPage />} />
      <Route path="/login" element={<LoginPage />} />
      <Route path="/register" element={<RegisterPage />} />
      <Route path="/forgot-password" element={<ForgotPasswordPage />} />
      <Route path="/test-dashboard" element={<TestDashboard />} />

      {/* 最后一个兜底 */}
      <Route path="*" element={<PlaceholderPage pageId="home" />} />

      {/* 普通管理员，无 header */}
      <Route path="admin" element={<AdminPage />} />

      {/* 超级管理员，只用 SuperAdminLayout */}
      <Route path="superadmin" element={<SuperAdmin />}>
        <Route index element={<Navigate to="users" replace />} />
        <Route path="users" element={<UserManagement superAdminId={3} />} />
        <Route path="dashboard" element={<LogsDashboard />} />
      </Route>
    </Routes>
  );
}