import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import { RoleProvider } from './contexts/RoleContext';
import { useEffect, Component, ErrorInfo, ReactNode, Suspense, lazy } from 'react';
import { initConnectionManager } from './lib/connectionManager';
import { useAnalytics } from './hooks/useAnalytics';
import { useServiceWorker } from './hooks/useServiceWorker';
import { performanceMonitor } from './lib/performanceMonitor';
import OfflineBanner from './components/OfflineBanner';
import LoadingState from './components/LoadingState';
import { Toaster } from 'react-hot-toast';
import AuthRoute from './components/AuthRoute';
import PageErrorBoundary from './components/PageErrorBoundary';
import Dashboard from './components/Dashboard';
import SkeletonLoader from './components/SkeletonLoader';
import './styles/printStyles.css';
// Lazy load pages for better code splitting and performance
const Sales = lazy(() => import('./pages/Sales'));
const ManagerDashboard = lazy(() => import('./pages/ManagerDashboard'));
const CashierDashboard = lazy(() => import('./pages/CashierDashboard'));
const SalespersonDashboard = lazy(() => import('./pages/SalespersonDashboard'));
const AdminDashboard = lazy(() => import('./pages/AdminDashboard'));
const SelectPlan = lazy(() => import('./pages/SelectPlan'));
const ContactAdmin = lazy(() => import('./pages/ContactAdmin'));
const SuperAdminDashboard = lazy(() => import('./pages/SuperAdminDashboard'));
const Login = lazy(() => import('./pages/Login'));
const LandingPage = lazy(() => import('./pages/LandingPage'));
const Checkout = lazy(() => import('./pages/Checkout'));
const Products = lazy(() => import('./pages/Products'));
const Purchase = lazy(() => import('./pages/Purchase'));
const Customers = lazy(() => import('./pages/Customers'));
const Reports = lazy(() => import('./pages/Reports'));
const GSTReports = lazy(() => import('./pages/GSTReports'));
const GSTSettings = lazy(() => import('./pages/GSTSettings'));
const WhatsAppSettings = lazy(() => import('./pages/WhatsAppSettings'));
const SalesReturn = lazy(() => import('./pages/SalesReturn'));
const OffersPromotions = lazy(() => import('./pages/OffersPromotions'));
const Users = lazy(() => import('./pages/Users'));
const Companies = lazy(() => import('./pages/Companies'));
const RoleSelection = lazy(() => import('./pages/RoleSelection'));
const AdminPanel = lazy(() => import('./pages/AdminPanel'));
const CompanyCreation = lazy(() => import('./pages/CompanyCreation'));
const SubscriptionBlocked = lazy(() => import('./pages/SubscriptionBlocked'));
const StockReport = lazy(() => import('./pages/StockReport'));
const ProfitLossReports = lazy(() => import('./pages/ProfitLossReports'));
const ExpensePage = lazy(() => import('./pages/ExpensePage'));
const ExpenseReportPage = lazy(() => import('./pages/ExpenseReportPage'));
const GrossProfitLossPage = lazy(() => import('./pages/GrossProfitLossPage'));
const TestPage = lazy(() => import('./pages/TestPage'));
const ProfessionalInvoiceDemo = lazy(() => import('./pages/ProfessionalInvoiceDemo'));
const BarcodePrinting = lazy(() => import('./pages/BarcodePrinting'));
const TestDashboard = lazy(() => import('./pages/TestDashboard'));
const UserProfile = lazy(() => import('./pages/UserProfile'));
const DatabaseTools = lazy(() => import('./pages/DatabaseTools'));
const AuditReportPage = lazy(() => import('./pages/AuditReportPage'));
// Loading fallback component for lazy-loaded routes - OPTIMIZED
const PageLoader = () =>
We're sorry, but an error occurred while loading the application.
{this.state.error?.toString()}