import { lazy, Suspense } from 'react' import type { View } from '@/App' import type { Timesheet, Invoice, PayrollRun, Worker, ComplianceDocument, Expense, RateCard, DashboardMetrics } from '@/lib/types' import { LoadingSpinner } from '@/components/ui/loading-spinner' import { toast } from 'sonner' const DashboardView = lazy(() => import('@/components/views').then(m => ({ default: m.DashboardView }))) const TimesheetsView = lazy(() => import('@/components/views').then(m => ({ default: m.TimesheetsView }))) const BillingView = lazy(() => import('@/components/views').then(m => ({ default: m.BillingView }))) const PayrollView = lazy(() => import('@/components/views').then(m => ({ default: m.PayrollView }))) const ComplianceView = lazy(() => import('@/components/views').then(m => ({ default: m.ComplianceView }))) const ExpensesView = lazy(() => import('@/components/views').then(m => ({ default: m.ExpensesView }))) const ReportsView = lazy(() => import('@/components/ReportsView').then(m => ({ default: m.ReportsView }))) const CurrencyManagement = lazy(() => import('@/components/CurrencyManagement').then(m => ({ default: m.CurrencyManagement }))) const EmailTemplateManager = lazy(() => import('@/components/EmailTemplateManager').then(m => ({ default: m.EmailTemplateManager }))) const InvoiceTemplateManager = lazy(() => import('@/components/InvoiceTemplateManager').then(m => ({ default: m.InvoiceTemplateManager }))) const QRTimesheetScanner = lazy(() => import('@/components/QRTimesheetScanner').then(m => ({ default: m.QRTimesheetScanner }))) const MissingTimesheetsReport = lazy(() => import('@/components/MissingTimesheetsReport').then(m => ({ default: m.MissingTimesheetsReport }))) const PurchaseOrderManager = lazy(() => import('@/components/PurchaseOrderManager').then(m => ({ default: m.PurchaseOrderManager }))) const OnboardingWorkflowManager = lazy(() => import('@/components/OnboardingWorkflowManager').then(m => ({ default: m.OnboardingWorkflowManager }))) const AuditTrailViewer = lazy(() => import('@/components/AuditTrailViewer').then(m => ({ default: m.AuditTrailViewer }))) const NotificationRulesManager = lazy(() => import('@/components/NotificationRulesManager').then(m => ({ default: m.NotificationRulesManager }))) const BatchImportManager = lazy(() => import('@/components/BatchImportManager').then(m => ({ default: m.BatchImportManager }))) const RateTemplateManager = lazy(() => import('@/components/RateTemplateManager').then(m => ({ default: m.RateTemplateManager }))) const CustomReportBuilder = lazy(() => import('@/components/CustomReportBuilder').then(m => ({ default: m.CustomReportBuilder }))) const HolidayPayManager = lazy(() => import('@/components/HolidayPayManager').then(m => ({ default: m.HolidayPayManager }))) const ContractValidator = lazy(() => import('@/components/ContractValidator').then(m => ({ default: m.ContractValidator }))) const ShiftPatternManager = lazy(() => import('@/components/ShiftPatternManager').then(m => ({ default: m.ShiftPatternManager }))) const QueryLanguageGuide = lazy(() => import('@/components/QueryLanguageGuide').then(m => ({ default: m.QueryLanguageGuide }))) const RoadmapView = lazy(() => import('@/components/roadmap-view').then(m => ({ default: m.RoadmapView }))) const ComponentShowcase = lazy(() => import('@/components/ComponentShowcase').then(m => ({ default: m.ComponentShowcase }))) const BusinessLogicDemo = lazy(() => import('@/components/BusinessLogicDemo').then(m => ({ default: m.BusinessLogicDemo }))) const DataAdminView = lazy(() => import('@/components/views/data-admin-view').then(m => ({ default: m.DataAdminView }))) interface ViewRouterProps { currentView: View searchQuery: string setSearchQuery: (query: string) => void metrics: DashboardMetrics timesheets: Timesheet[] invoices: Invoice[] payrollRuns: PayrollRun[] workers: Worker[] complianceDocs: ComplianceDocument[] expenses: Expense[] rateCards: RateCard[] setTimesheets: (updater: (current: Timesheet[]) => Timesheet[]) => void setPayrollRuns: (updater: (current: PayrollRun[]) => PayrollRun[]) => void actions: any } function LoadingFallback() { return (