import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom' import { ThemeProvider } from './contexts/ThemeContext' import { AuthProvider } from './contexts/AuthContext' import { ModulesProvider } from './contexts/ModulesContext' import { AmenitiesProvider } from './contexts/AmenitiesContext' import { BedTypesProvider } from './contexts/BedTypesContext' import { NotificationsProvider } from './contexts/NotificationsContext' import { AppLayout } from './layouts/AppLayout' import { LoginPage } from './pages/LoginPage' import { CalendarPage } from './pages/CalendarPage' import { BookingsPage } from './pages/BookingsPage' import { RoomsPage } from './pages/RoomsPage' import { HousekeepingPage } from './pages/HousekeepingPage' import { ChannelsPage } from './pages/ChannelsPage' import { ApiDocsPage } from './pages/ApiDocsPage' import { SettingsPage } from './pages/SettingsPage' import { ModulesPage } from './pages/ModulesPage' import { ReportsPage } from './pages/ReportsPage' import { WebsitePage } from './pages/WebsitePage' import { BookingWidgetPage } from './pages/BookingWidgetPage' import { AvailabilityPage } from './pages/AvailabilityPage' import { FloorMapPage } from './pages/FloorMapPage' import { MigrationPage } from './pages/MigrationPage' import { PosPage } from './pages/PosPage' import { ReviewsPage } from './pages/ReviewsPage' import { RoomServicePage } from './pages/RoomServicePage' import { RentalPage } from './pages/RentalPage' import { RoomCategoriesPage } from './pages/RoomCategoriesPage' import { DocumentsPage } from './pages/DocumentsPage' import { UsersPage } from './pages/UsersPage' import { GuestsPage } from './pages/GuestsPage' import { TariffsPage } from './pages/TariffsPage' import { DynamicPricingPage } from './pages/DynamicPricingPage' import { LoyaltyPage } from './pages/LoyaltyPage' import { MaintenancePage } from './pages/MaintenancePage' import { DiscountsPage } from './pages/DiscountsPage' import { GuestReviewPage } from './pages/GuestReviewPage' import { GuestRoomServicePage } from './pages/GuestRoomServicePage' import { ResetPasswordPage } from './pages/ResetPasswordPage' import { AcceptInvitePage } from './pages/AcceptInvitePage' import { TvWelcomePage } from './pages/TvWelcomePage' import { TechnicalPage } from './pages/TechnicalPage' import { SchedulePage } from './pages/SchedulePage' import { BillingPage } from './pages/BillingPage' import { EquipmentPage } from './pages/EquipmentPage' import { WiFiPage } from './pages/WiFiPage' import { TTLockPage } from './pages/TTLockPage' import { ChecklistSettingsPage } from './pages/ChecklistSettingsPage' import { MinibarSettingsPage } from './pages/MinibarSettingsPage' import { MinibarStockPage } from './pages/MinibarStockPage' import { PaymentSettingsPage } from './pages/PaymentSettingsPage' import { DepositSettingsPage } from './pages/DepositSettingsPage' import { DepositHistoryPage } from './pages/DepositHistoryPage' import { PayDepositPage } from './pages/PayDepositPage' import { BookingWidgetStandalonePage } from './pages/BookingWidgetStandalonePage' import { BookingConfirmPage } from './pages/BookingConfirmPage' import { ModuleGuard } from './components/ModuleGuard' import { PermissionGuard } from './components/PermissionGuard' import { RolePermissionsProvider, useRolePermissions } from './contexts/RolePermissionsContext' import { useAuth } from './contexts/AuthContext' // Redirects to the user's role home page after login function HomeRedirect() { const { user } = useAuth() const { userHomePage, loading } = useRolePermissions() if (!user) return if (loading) return null return } // Shorthand: wrap element with PermissionGuard function P({ perm, children }: { perm: string; children: React.ReactNode }) { return {children} } export default function App() { return ( {/* Public */} } /> } /> } /> } /> } /> } /> } /> } /> {/* PMS routes */} }>

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} />

} /> } /> } /> } />
) }