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 UserProfile from '../components/UserProfile'; // src/components/UserProfileRoute.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';

import TransactionLogs from '../components/TransactionLogs';
import PerformanceLogs from '../components/PerformanceLogs';
import NotebookPage    from '../components/NotebookPage'

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

      <Route path="/notebooks" element={<NotebookPage />} />
      <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="/user/:userId" element={<UserProfile />} />
      <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 />} />

      {/* 普通管理员，无 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} />} />

        {/* dashboard as layout */}
        <Route path="dashboard" element={<LogsDashboard />}>
          <Route index element={<Navigate to="transactions" replace />} />
          <Route path="transactions" element={<TransactionLogs userId={1} />} />
          <Route path="performance" element={<PerformanceLogs userId={1} />} />
        </Route>
      </Route>

      {/* 最后一个兜底，放在最末尾 */}
      <Route path="*" element={<PlaceholderPage pageId="home" />} />
    </Routes>
  );
}