// src/router/index.jsx
import React from 'react'
import { Routes, Route, Navigate } from 'react-router-dom'

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 HomeFeed           from '../components/HomeFeed'
import CreatePost         from '../components/CreatePost'
import NotebookPage       from '../components/NotebookPage'
import PlaceholderPage    from '../components/PlaceholderPage'
import UserProfile        from '../components/UserProfile'

import AdminPage          from '../components/Admin'
import SuperAdmin         from '../components/SuperAdmin'
import UserManagement     from '../components/UserManagement'
import LogsDashboard      from '../components/LogsDashboard'
import TransactionLogs    from '../components/TransactionLogs'
import PerformanceLogs    from '../components/PerformanceLogs'

import {
  RequireAuth,
  RequireRole,
  RequireOwnProfile,
  RequireAdminOwn,
  RequireSuperAdminOwn
} from './Guards'

export default function AppRoutes() {
  return (
    <Routes>
      {/* 1. 公开路由 */}
      <Route path="/login"           element={<LoginPage />} />
      <Route path="/register"        element={<RegisterPage />} />
      <Route path="/forgot-password" element={<ForgotPasswordPage />} />

      {/* 2. 受保护路由 */}
      <Route element={<RequireAuth />}>
        {/* 2.1 任何登录用户都能看自己的主页 */}
        <Route element={<RequireOwnProfile />}>
          <Route path="/user/:userId" element={<UserProfile />} />
        </Route>

        {/* 2.2 普通用户 */}
        <Route element={<RequireRole allowedRoles={['user']} />}>
          <Route path="/home"               element={<HomeFeed />} />
          <Route path="/posts/new"          element={<CreatePost />} />
          <Route path="/posts/edit/:postId" element={<CreatePost />} />
          <Route path="/notebooks"          element={<NotebookPage />} />
          <Route path="/dashboard/*"        element={<PlaceholderPage />} />
          <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="/"                   element={<Navigate to="/home" replace />} />
        </Route>

        {/* 2.3 Admin 自己的页面 */}
        <Route element={<RequireAdminOwn />}>
          <Route path="/admin/:userId" element={<AdminPage />} />
        </Route>
        <Route element={<RequireRole allowedRoles={['admin']} />}>
          <Route path="/test-dashboard" element={<TestDashboard />} />
        </Route>

        {/* 2.4 SuperAdmin 自己的区域 */}
        <Route element={<RequireSuperAdminOwn />}>
          <Route path="/superadmin/:userId/*" element={<SuperAdmin />}>
            <Route index element={<Navigate to="users" replace />} />
            <Route path="users"     element={<UserManagement />} />
            <Route path="dashboard" element={<LogsDashboard />}>
              <Route index element={<Navigate to="transactions" replace />} />
              <Route path="transactions" element={<TransactionLogs />} />
              <Route path="performance"  element={<PerformanceLogs />} />
            </Route>
          </Route>
        </Route>
      </Route>

      {/* 3. 兜底：未匹配一律回登录 */}
      <Route path="*" element={<Navigate to="/login" replace />} />
    </Routes>
  )
}
