import { Navigate, Route, Routes } from 'react-router-dom'
import { LoginPage } from '@/pages/LoginPage'
import { RegisterPage } from '@/pages/RegisterPage'
import { VerifyEmailPage } from '@/pages/VerifyEmailPage'
import { ConsentPolicyPage } from '@/pages/ConsentPolicyPage'
import { LobbyPage } from '@/pages/LobbyPage'
import { JoinPage } from '@/pages/JoinPage'
import { RoomPage } from '@/pages/RoomPage'
import { CalendarPage } from '@/pages/CalendarPage'
import { MyConferencesPage } from '@/pages/MyConferencesPage'
import { ProfilePage } from '@/pages/ProfilePage'
import { AdminPage } from '@/pages/AdminPage'
import { RequireAuth } from '@/auth/RequireAuth'
import { RequireAdmin } from '@/auth/RequireAdmin'

function App() {
  return (
    <Routes>
      <Route path="/" element={<Navigate to="/lobby" replace />} />
      <Route path="/login" element={<LoginPage />} />
      <Route path="/register" element={<RegisterPage />} />
      <Route path="/verify-email" element={<VerifyEmailPage />} />
      {/* Публичная страница регламента обработки ПДн — читается до регистрации,
          когда пользователя ещё нет; ссылка на неё — рядом с галочкой согласия
          на RegisterPage. */}
      <Route path="/legal/personal-data-consent" element={<ConsentPolicyPage />} />
      <Route
        path="/lobby"
        element={
          <RequireAuth>
            <LobbyPage />
          </RequireAuth>
        }
      />
      {/* Подключение по ссылке/номеру — публичное: доступно и гостю без аккаунта. */}
      <Route path="/join" element={<JoinPage />} />
      <Route path="/j/:slug" element={<JoinPage />} />
      {/*
       * Комната конференции — тоже публичная: гость подключается по токену,
       * переданному через navigation state из JoinPage (без JWT-сессии
       * приложения). Авторизация внутри самой страницы не требуется — см.
       * комментарий в RoomPage.tsx.
       */}
      <Route path="/room/:slug" element={<RoomPage />} />
      <Route
        path="/calendar"
        element={
          <RequireAuth>
            <CalendarPage />
          </RequireAuth>
        }
      />
      <Route
        path="/my-conferences"
        element={
          <RequireAuth>
            <MyConferencesPage />
          </RequireAuth>
        }
      />
      <Route
        path="/profile"
        element={
          <RequireAuth>
            <ProfilePage />
          </RequireAuth>
        }
      />
      <Route
        path="/admin"
        element={
          <RequireAuth>
            <RequireAdmin>
              <AdminPage />
            </RequireAdmin>
          </RequireAuth>
        }
      />
      <Route path="*" element={<Navigate to="/lobby" replace />} />
    </Routes>
  )
}

export default App
