import { useEffect } from 'react' import { Routes, Route, Navigate } from 'react-router-dom' import { useAuthStore } from '@/store/auth' import { ToastContainer, ConfirmModal } from '@/components/ui' import { BannedScreen } from '@/components/BannedScreen' // Layout import { Layout } from '@/components/layout/Layout' // Pages import { HomePage } from '@/pages/HomePage' import { LoginPage } from '@/pages/LoginPage' import { RegisterPage } from '@/pages/RegisterPage' import { MarathonsPage } from '@/pages/MarathonsPage' import { CreateMarathonPage } from '@/pages/CreateMarathonPage' import { MarathonPage } from '@/pages/MarathonPage' import { LobbyPage } from '@/pages/LobbyPage' import { PlayPage } from '@/pages/PlayPage' import { LeaderboardPage } from '@/pages/LeaderboardPage' import { InvitePage } from '@/pages/InvitePage' import { AssignmentDetailPage } from '@/pages/AssignmentDetailPage' import { ProfilePage } from '@/pages/ProfilePage' import { UserProfilePage } from '@/pages/UserProfilePage' import { StaticContentPage } from '@/pages/StaticContentPage' import { NotFoundPage } from '@/pages/NotFoundPage' import { TeapotPage } from '@/pages/TeapotPage' import { ServerErrorPage } from '@/pages/ServerErrorPage' // Admin Pages import { AdminLayout, AdminDashboardPage, AdminUsersPage, AdminMarathonsPage, AdminLogsPage, AdminBroadcastPage, AdminContentPage, } from '@/pages/admin' // Protected route wrapper function ProtectedRoute({ children }: { children: React.ReactNode }) { const isAuthenticated = useAuthStore((state) => state.isAuthenticated) if (!isAuthenticated) { return } return <>{children} } // Public route wrapper (redirect if authenticated) function PublicRoute({ children }: { children: React.ReactNode }) { const isAuthenticated = useAuthStore((state) => state.isAuthenticated) if (isAuthenticated) { return } return <>{children} } function App() { const banInfo = useAuthStore((state) => state.banInfo) const isAuthenticated = useAuthStore((state) => state.isAuthenticated) const syncUser = useAuthStore((state) => state.syncUser) // Sync user data with server on app load useEffect(() => { syncUser() }, [syncUser]) // Show banned screen if user is authenticated and banned if (isAuthenticated && banInfo) { return ( <> ) } return ( <> }> } /> {/* Public invite page */} } /> {/* Public static content pages */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Profile routes */} } /> } /> {/* Easter egg - 418 I'm a teapot */} } /> } /> } /> {/* Server error page */} } /> } /> {/* Admin routes */} } > } /> } /> } /> } /> } /> } /> {/* 404 - must be last */} } /> ) } export default App