app_App.jsx

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'
import Layout from '../components/Layout'
import Header from '../components/Header'
import Footer from '../components/Footer'
import RequireAuth from '../features/auth/RequireAuth'
import Unauthorized from '../components/Unauthorized'
import Error from '../components/Error'
import Home from '../pages/Home'
import Login from '../features/auth/Login'
import Logout from '../features/auth/Logout'
import Profile from '../features/profile/Profile'

/**
 * App's component to manage various routes
 * and display corresponding pages components
 *
 * @author  Pierre-Yves Léglise <pleglise@pm.me>
 * @name App
 * @returns {JSX}
 */

function App() {
  return (
    <Router>
      <Header />

      <Routes>
        <Route path="/" element={<Layout />}>
          {/* Public Routes */}
          <Route index path="/" element={<Home />} />
          <Route path="/login" element={<Login />} />

          {/* Protected Routes */}
          <Route element={<RequireAuth />}>
            <Route path="/profile" element={<Profile />} />
            <Route path="/logout" element={<Logout />} />
          </Route>

          {/* Fallback for protected Routes */}
          <Route path="/unauthorized" element={<Unauthorized />} />

          {/* All other url : Error Route */}
          <Route path="*" element={<Error />} />
        </Route>
      </Routes>

      <Footer />
    </Router>
  )
}
export default App