./knowledge-base/frontend/src/App.tsx

import { Routes, Route } from "react-router-dom";
import { Box } from "@mui/material";
import { AuthProvider } from "./auth/AuthContext";
import { ProtectedRoute } from "./auth/ProtectedRoute";
import HomePage from "./pages/HomePage";
import SearchPage from "./pages/SearchPage";
import UploadPage from "./pages/UploadPage";
import LoginCallbackPage from "./pages/LoginCallbackPage";
import MaintenancePage from "./pages/MaintenancePage";

/**
 * アプリケーションルート
 *
 * 認証フロー:
 *   1. 未認証ユーザーが / /search /upload にアクセス
 *   2. ProtectedRoute が Okta ログインページへリダイレクト
 *   3. Okta 認証後、/login/callback に戻ってくる
 *   4. LoginCallbackPage がトークンを処理し / へ遷移
 */
function App() {
  return (
    <AuthProvider>
      <Box sx={{ minHeight: "100vh", bgcolor: "#f5f5f5" }}>
        <Routes>
          {/* Okta コールバック(認証ガード不要) */}
          <Route path="/login/callback" element={<LoginCallbackPage />} />

          {/* 全ルートを認証ガードで保護 */}
          <Route
            path="/"
            element={
              <ProtectedRoute>
                <HomePage />
              </ProtectedRoute>
            }
          />
          <Route
            path="/search"
            element={
              <ProtectedRoute>
                <SearchPage />
              </ProtectedRoute>
            }
          />
          <Route
            path="/upload"
            element={
              <ProtectedRoute>
                <UploadPage />
              </ProtectedRoute>
            }
          />
          <Route
            path="/maintenance"
            element={
              <ProtectedRoute>
                <MaintenancePage />
              </ProtectedRoute>
            }
          />
        </Routes>
      </Box>
    </AuthProvider>
  );
}

export default App;