import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import { QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { Suspense, lazy } from 'react';
import { AuthProvider } from './contexts/AuthContext';
import { ThemeProvider } from './contexts/ThemeContext';
import { ToastProvider } from './contexts/ToastContext';
import { ErrorBoundary } from './components/common/ErrorBoundary';
import { LoadingSpinner } from './components/ui/LoadingSpinner';
import { queryClient } from './lib/queryClient';
import { useAuth } from './contexts/AuthContext';
import { Layout } from './components/layout/Layout';
// Lazy load pages for better code splitting
const Login = lazy(() => import('./pages/Login').then(module => ({ default: module.Login })));
const Dashboard = lazy(() => import('./pages/Dashboard').then(module => ({ default: module.Dashboard })));
const Users = lazy(() => import('./pages/Users').then(module => ({ default: module.Users })));
const Reports = lazy(() => import('./pages/Reports').then(module => ({ default: module.Reports })));
const Notifications = lazy(() => import('./pages/Notifications').then(module => ({ default: module.Notifications })));
// Lazy load admin pages for better code splitting
// Roles Pages
const RolesListPage = lazy(() => import('./pages/roles/roles-list/RolesListPage'));
const RoleFormPage = lazy(() => import('./pages/roles/role-form/RoleFormPage'));
const RoleDetailPage = lazy(() => import('./pages/roles/role-detail/RoleDetailPage'));
const RolePermissionsPage = lazy(() => import('./pages/roles/role-permissions/RolePermissionsPage'));
// Admin Users Pages
const AdminUsersListPage = lazy(() => import('./pages/admin-users/admin-users-list/AdminUsersListPage'));
const AdminUserFormPage = lazy(() => import('./pages/admin-users/admin-user-form/AdminUserFormPage'));
const AdminUserDetailPage = lazy(() => import('./pages/admin-users/admin-user-detail/AdminUserDetailPage'));
// Permissions Pages
const PermissionsListPage = lazy(() => import('./pages/permissions/permissions-list/PermissionsListPage'));
const PermissionFormPage = lazy(() => import('./pages/permissions/permission-form/PermissionFormPage'));
// Product Options Pages
const ProductOptionsListPage = lazy(() => import('./pages/product-options/product-options-list/ProductOptionsListPage'));
const ProductOptionFormPage = lazy(() => import('./pages/product-options/product-option-form/ProductOptionFormPage'));
// Categories Pages
const CategoriesListPage = lazy(() => import('./pages/categories/categories-list/CategoriesListPage'));
const CategoryFormPage = lazy(() => import('./pages/categories/category-form/CategoryFormPage'));
// Discount Codes Pages
const DiscountCodesListPage = lazy(() => import('./pages/discount-codes/discount-codes-list/DiscountCodesListPage'));
const DiscountCodeFormPage = lazy(() => import('./pages/discount-codes/discount-code-form/DiscountCodeFormPage'));
// Orders Pages
const OrdersListPage = lazy(() => import('./pages/orders/orders-list/OrdersListPage'));
const OrderDetailPage = lazy(() => import('./pages/orders/order-detail/OrderDetailPage'));
// Users Admin Pages
const UsersAdminListPage = lazy(() => import('./pages/users-admin/users-admin-list/UsersAdminListPage'));
const UserAdminDetailPage = lazy(() => import('./pages/users-admin/user-admin-detail/UserAdminDetailPage'));
const UserAdminFormPage = lazy(() => import('./pages/users-admin/user-admin-form/UserAdminFormPage'));
// Products Pages
const ProductsListPage = lazy(() => import('./pages/products/products-list/ProductsListPage'));
const ProductFormPage = lazy(() => import('./pages/products/product-form/ProductFormPage'));
const ProductDetailPage = lazy(() => import('./pages/products/product-detail/ProductDetailPage'));
// Landing Hero Page
const HeroSliderPage = lazy(() => import('./pages/landing-hero/HeroSliderPage'));
// Shipping Methods Pages
const ShippingMethodsListPage = lazy(() => import('./pages/shipping-methods/shipping-methods-list/ShippingMethodsListPage'));
const ShippingMethodFormPage = lazy(() => import('./pages/shipping-methods/shipping-method-form/ShippingMethodFormPage'));
const TicketsListPage = lazy(() => import('./pages/tickets/tickets-list/TicketsListPage'));
const TicketDetailPage = lazy(() => import('./pages/tickets/ticket-detail/TicketDetailPage'));
const TicketConfigPage = lazy(() => import('./pages/tickets/ticket-config/TicketConfigPage'));
// Payment IPG Page
const IPGListPage = lazy(() => import('./pages/payment-ipg/ipg-list/IPGListPage'));
// Payment Card Page
const CardFormPage = lazy(() => import('./pages/payment-card/card-form/CardFormPage'));
// Wallet Page
const WalletListPage = lazy(() => import('./pages/wallet/wallet-list/WalletListPage'));
// Reports Pages
const DiscountUsageReportPage = lazy(() => import('./pages/reports/discount-statistics/discount-usage-report/DiscountUsageReportPage'));
const CustomerDiscountUsagePage = lazy(() => import('./pages/reports/discount-statistics/customer-discount-usage/CustomerDiscountUsagePage'));
const PaymentMethodsReportPage = lazy(() => import('./pages/reports/payment-statistics/payment-methods-report/PaymentMethodsReportPage'));
const ShipmentsByMethodReportPage = lazy(() => import('./pages/reports/shipment-statistics/shipments-by-method-report/ShipmentsByMethodReportPage'));
// Product Comments Page
const ProductCommentsListPage = lazy(() => import('./pages/products/comments/comments-list/ProductCommentsListPage'));
const ProtectedRoute = ({ children }: { children: any }) => {
const { user, isLoading } = useAuth();
if (isLoading) {
return (
);
}
return user ? children : ;
};
const AppRoutes = () => {
return (
} />
}>
} />
} />
} />
} />
} />
{/* Roles Routes */}
} />
} />
} />
} />
} />
{/* Admin Users Routes */}
} />
} />
} />
} />
{/* Permissions Routes */}
} />
} />
} />
{/* Product Options Routes */}
} />
} />
} />
{/* Categories Routes */}
} />
} />
} />
{/* Discount Codes Routes */}
} />
} />
} />
{/* Orders Routes */}
} />
} />
{/* Users Admin Routes */}
} />
} />
} />
} />
{/* Landing Hero Route */}
} />
{/* Shipping Methods Routes */}
} />
} />
} />
} />
} />
} />
{/* Products Routes */}
} />
} />
} />
} />
{/* Payment IPG Route */}
} />
{/* Payment Card Route */}
} />
{/* Wallet Route */}
} />
{/* Reports Routes */}
} />
} />
} />
} />
);
};
const App = () => {
return (
}>
);
};
export default App;