Source: frontend/src/App.jsx

/**
 * @file App.jsx - Haupt-Routing-Komponente der Anwendung
 * @author Farah
 * @description Definiert die Haupt-Routing-Struktur der Anwendung, einschließlich geschützter Routen für das Dashboard 
 * und Admin-Bereich sowie Authentifizierungsrouten.
 * 
 * @requires react-router-dom
 * @requires ./pages/Login
 * @requires ./pages/Signup
 * @requires ./pages/Home
 * @requires ./pages/Verification
 * @requires ./pages/Requestpassword
 * @requires ./pages/Setpassword
 * @requires ./components/ui/Layout
 * @requires ./features/dashboard/FileUpload
 * @requires ./components/ProtectedRoute
 * @requires ./pages/Dashboard
 * @requires ./pages/admin/AdminDashboard
 * @requires ./features/dashboard/FolderPage
 * @requires ./pages/Impressum
 */

import { Routes, Route, Navigate } from "react-router-dom"; // Added Navigate here
import Login from "./pages/Login";
import Signup from "./pages/Signup";
import Home from "./pages/Home";
import Verification from "./pages/Verification";
import Requestpassword from "./pages/Requestpassword";
import Setpassword from "./pages/Setpassword";

import Layout from "./components/ui/Layout";
import FileUpload from "./features/dashboard/FileUpload";
import ProtectedRoute from "./components/ProtectedRoute";
import Dashboard from "./pages/Dashboard";
import AdminDashboard from "./pages/admin/AdminDashboard";
import FolderPage from "./features/dashboard/FolderPage";
import Impressum from "./pages/Impressum";

/**
 * Hauptkomponente der Anwendung, die das Routing verwaltet
 * @component
 * @returns {JSX.Element} Die gerenderte App-Komponente mit Routing-Struktur
 * 
 * @example
 * return (
 *   <BrowserRouter>
 *     <App />
 *   </BrowserRouter>
 * )
 */
/**
 * Routing-Gruppen der Anwendung
 * @namespace Routes
 * @property {Object} PublicRoutes - Öffentlich zugängliche Routen
 * @property {Object} AdminRoutes - Geschützte Admin-Routen
 * @property {Object} DashboardRoutes - Geschützte Dashboard-Routen
 * @property {Object} AuthRoutes - Authentifizierungs-Routen
 */
/**
 * Props für die ProtectedRoute-Komponente
 * @typedef {Object} ProtectedRouteProps
 * @property {boolean} shouldBeAuthenticated - Gibt an, ob der Benutzer authentifiziert sein muss
 * @property {boolean} [isAdminRoute] - Optional: Gibt an, ob es sich um eine Admin-Route handelt
 * @property {React.ReactNode} children - Die zu rendernden Kind-Komponenten
 */
const App = () => {
  return (
    <div>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/Impressum" element={<Impressum />} />

        {/* Admin Route */}
        <Route
          path="/admin"
          element={
            <ProtectedRoute shouldBeAuthenticated={true} isAdminRoute={true}>
              <AdminDashboard />
            </ProtectedRoute>
          }
        />

        {/* Protected Dashboard Routes */}
        <Route
          element={
            <ProtectedRoute shouldBeAuthenticated={true}>
              <Layout />
            </ProtectedRoute>
          }
        >
          <Route index path="/dashboard" element={<Dashboard />} />
          <Route index path="/folders/:folderId" element={<FolderPage />} />
          <Route path="/upload" element={<FileUpload />} />
          <Route path="/reset-password" element={<Setpassword />} />
          
        </Route>

        {/* Auth Routes */}
        <Route
          path="/auth/login"
          element={
            <ProtectedRoute shouldBeAuthenticated={false}>
              <Login />
            </ProtectedRoute>
          }
        />
        <Route
          path="/auth/signup"
          element={
            <ProtectedRoute shouldBeAuthenticated={false}>
              <Signup />
            </ProtectedRoute>
          }
              />
              <Route
                  path="/Verification"
                  element={
                      <ProtectedRoute shouldBeAuthenticated={false}>
                          <Verification />
                      </ProtectedRoute>
                  }
              />
              <Route
                    path="/Requestpassword"
                    element={
                        <ProtectedRoute shouldBeAuthenticated={false}>
                            <Requestpassword />
                        </ProtectedRoute>
                    }
              />
              <Route
                    path="/Setpassword"
                        element={
                            <ProtectedRoute shouldBeAuthenticated={false}>
                                <Setpassword />
                            </ProtectedRoute>
                        }  
                        />
          </Routes>
         
    </div>
  );
};

export default App;