import { Suspense, lazy, useEffect } from "react";
import { Route, Switch, useLocation } from "wouter";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { HelmetProvider } from "react-helmet-async";
import { preloadCriticalRoutes } from "./shared/utils/routePreloader";
import { trackFeature, trackSessionDepth, FEATURES } from "./utils/analytics";
// Core components that should load immediately
import Header from "./shared/components/Header";
import Footer from "./shared/components/Footer";
import BottomNavigationBar from "./components/navigation/BottomNavigationBar";
import FeedbackWidget from "./components/feedback/FeedbackWidget";
import CustomerSupportChat from "./shared/components/CustomerSupportChat";
import WelcomeModal from "./components/onboarding/WelcomeModal";
import StreamlinedOnboarding from "./components/onboarding/StreamlinedOnboarding";
// Lazy load all route components for better performance
const Home = lazy(() => import("./core/pages/home"));
const Landing = lazy(() => import("./pages/Landing"));
const AboutUs = lazy(() => import("./pages/about-us"));
const Pricing = lazy(() => import("./core/pages/pricing"));
const ComplexityDashboard = lazy(
() => import("./modules/analytics/complexity-dashboard"),
);
const EcoRecommendationEngine = lazy(
() => import("./modules/sustainability/eco-recommendation-engine"),
);
const CommunityKnowledgeSharing = lazy(
() => import("./pages/community-knowledge-sharing"),
);
const InteractivePestRiskAssessment = lazy(
() => import("./pages/interactive-pest-risk-assessment"),
);
const AIFeaturesHub = lazy(() => import("./modules/ai/ai-features-hub"));
const AIPestDemo = lazy(() => import("./pages/ai-pest-demo"));
const CRM = lazy(() => import("./core/pages/crm"));
const PestControl = lazy(() => import("./core/pages/pest-control"));
const ResidentialServices = lazy(
() => import("./core/pages/residential-services"),
);
const SpecialistServices = lazy(() => import("./pages/specialist-services"));
const Quotation = lazy(() => import("./core/pages/quotation"));
const Quote = lazy(() => import("./core/pages/quote"));
const NotFound = lazy(() => import("./pages/not-found"));
const BookDemo = lazy(() => import("./pages/book-demo"));
const BackendAdmin = lazy(() => import("./core/pages/backend-admin"));
const PricingAdmin = lazy(() => import("./pages/pricing-admin"));
const UnifiedPerformanceDashboard = lazy(
() => import("./pages/unified-performance-dashboard"),
);
const AnalyticsDashboard = lazy(
() => import("./modules/analytics/analytics-dashboard"),
);
const SustainabilityImpactTracker = lazy(
() => import("./modules/sustainability/sustainability-impact-tracker"),
);
const SmartPestAlerts = lazy(() => import("./pages/smart-pest-alerts"));
const GatedAIVoiceAssistant = lazy(
() => import("./modules/ai/GatedAIVoiceAssistant"),
);
const IoTPestSensors = lazy(() => import("./modules/iot/iot-pest-sensors"));
const SustainabilityDashboard = lazy(
() => import("./modules/sustainability/sustainability-dashboard"),
);
const SeasonalPreventionCalendar = lazy(
() => import("./pages/seasonal-prevention-calendar"),
);
const PreventionCoach = lazy(() => import("./pages/prevention-coach"));
const GatedARPestLens = lazy(() => import("./modules/ar-vr/GatedARPestLens"));
const SmartTreatmentOptimizer = lazy(
() => import("./pages/smart-treatment-optimizer"),
);
const EnvironmentalRiskAssessment = lazy(
() => import("./pages/environmental-risk-assessment"),
);
const PestRiskQuiz = lazy(() => import("./pages/pest-risk-quiz"));
const MobilePestScanner = lazy(
() => import("./modules/ai/mobile-pest-scanner"),
);
const CommercialSolutions = lazy(
() => import("./core/pages/commercial-solutions"),
);
const IndustrialSolutions = lazy(() => import("./pages/industrial-solutions"));
const EmergencyPestControl = lazy(
() => import("./pages/emergency-pest-control"),
);
const HygieneServices = lazy(() => import("./pages/hygiene-services"));
const AftercareServices = lazy(() => import("./pages/aftercare-services"));
const IPMServices = lazy(() => import("./pages/ipm-services"));
const AISolutionsPlatform = lazy(() => import("./pages/ai-solutions-platform"));
const QualityAssurance = lazy(() => import("./pages/quality-assurance"));
const PestProtectionPlans = lazy(() => import("./pages/pest-protection-plans"));
const SpecialistQuote = lazy(() => import("./pages/specialist-quote"));
const AIAssistant = lazy(() => import("./modules/ai/ai-assistant"));
const AIDetectionChallengeLive = lazy(
() => import("./modules/ai/ai-detection-challenge-live"),
);
const AIPreventionSidekick = lazy(
() => import("./modules/ai/ai-prevention-sidekick"),
);
const ARPestIdentification = lazy(
() => import("./modules/ar-vr/ar-pest-identification"),
);
const PredictiveCalendar = lazy(
() => import("./modules/analytics/predictive-calendar"),
);
const FormsHub = lazy(() => import("./pages/forms-hub"));
const WorkflowAdmin = lazy(() => import("./pages/workflow-admin"));
const MarketingStrategy = lazy(() => import("./pages/marketing-strategy"));
const MarketingCalendar = lazy(() => import("./pages/marketing-calendar"));
const MarketingDashboard = lazy(() => import("./pages/marketing-dashboard"));
const HighROICampaigns = lazy(() => import("./pages/high-roi-campaigns"));
const NotificationPreferences = lazy(
() => import("./pages/notification-preferences"),
);
const Education = lazy(() => import("./pages/education"));
const VREducation = lazy(() => import("./modules/ar-vr/vr-education"));
const LearningAudit = lazy(() => import("./pages/learning-audit"));
const PestLifecycleStorytelling = lazy(
() => import("./pages/pest-lifecycle-storytelling"),
);
const DownloadApp = lazy(() => import("./pages/DownloadApp"));
const SeasonalForecast = lazy(
() => import("./modules/analytics/seasonal-forecast"),
);
const BugReport = lazy(() => import("./pages/bug-report"));
const Checkout = lazy(() => import("./core/pages/checkout"));
const PaymentSuccess = lazy(() => import("./core/pages/payment-success"));
const PestLifecycleAnimations = lazy(
() => import("./pages/pest-lifecycle-animations"),
);
const QrServiceTracking = lazy(() => import("./pages/qr-service-tracking"));
const SurveyReport = lazy(() => import("./pages/survey-report"));
const TreatmentReport = lazy(() =>
import("./pages/treatment-report").then((module) => ({
default: (props: any) => (
),
})),
);
const Contact = lazy(() => import("./core/pages/contact"));
const Book = lazy(() => import("./core/pages/book"));
const AdminCommandCenter = lazy(
() => import("./core/pages/admin-command-center"),
);
const KnowledgeBase = lazy(() => import("./pages/knowledge-base"));
const SopManagement = lazy(() => import("./pages/sop-management"));
const FieldTechnicianMobile = lazy(
() => import("./pages/field-technician-mobile"),
);
const SurveyReportV2 = lazy(() => import("./pages/survey-report-v2"));
const CmsAdmin = lazy(() => import("./pages/cms-admin"));
// New Admin Monitoring & Communication Pages
const SystemLogsPage = lazy(() => import("./pages/admin/system-logs"));
const PerformanceMetricsPage = lazy(
() => import("./pages/admin/performance-metrics"),
);
const DatabaseStatusPage = lazy(() => import("./pages/admin/database-status"));
const CommunicationManagementPage = lazy(
() => import("./pages/admin/communication-management"),
);
const TechnicianAssessment = lazy(
() => import("./pages/technician-assessment"),
);
const FeatureIdeas = lazy(() => import("./pages/feature-ideas"));
const EducationHub = lazy(() => import("./pages/education-hub"));
const AssessmentSchedule = lazy(() => import("./pages/assessment-schedule"));
const TermsOfService = lazy(() => import("./pages/terms-of-service"));
const PrivacyPolicy = lazy(() => import("./pages/privacy-policy"));
const SecurityPage = lazy(() => import("./pages/security"));
const EnterprisePage = lazy(() => import("./pages/enterprise"));
const FreeTrial = lazy(() => import("./pages/free-trial"));
const SeasonalTrendsDashboard = lazy(
() => import("./modules/analytics/seasonal-trends-dashboard"),
);
const PestTrendsDashboard = lazy(() => import("./pages/pest-trends-dashboard"));
const QuickBooks = lazy(() => import("./modules/integrations/quickbooks"));
const WasteManagement = lazy(() => import("./pages/waste-management"));
const HygieneAssessment = lazy(() => import("./pages/hygiene-assessment"));
const ServiceCompletion = lazy(() => import("./pages/service-completion"));
const CoshhDataSheets = lazy(() => import("./pages/coshh-data-sheets"));
const DashboardRenderer = lazy(() =>
import("./components/dashboard/DashboardRenderer").then((module) => ({
default: module.DashboardRenderer,
})),
);
const ComplianceAudit = lazy(() => import("./pages/compliance-audit"));
const TreatmentReports = lazy(() => import("./pages/treatment-reports"));
const ServiceAgreements = lazy(() => import("./pages/service-agreements"));
const CustomerFeedback = lazy(() => import("./pages/customer-feedback"));
const CommandCenter = lazy(() => import("./pages/command-center"));
const ProfilePage = lazy(() => import("./pages/profile"));
const SettingsPage = lazy(() => import("./pages/settings"));
const EcoWarriorBadges = lazy(
() => import("./modules/sustainability/eco-warrior-badges"),
);
const AccessControl = lazy(() => import("./pages/access-control"));
const CustomerImportPage = lazy(() => import("./pages/customer-import"));
const CookiePolicy = lazy(() => import("./pages/cookie-policy"));
const Careers = lazy(() => import("./pages/careers"));
const FeatureManagement = lazy(() => import("./pages/admin/FeatureManagement"));
const Blog = lazy(() => import("./pages/blog"));
const FAQ = lazy(() => import("./pages/faq"));
const ServiceAreas = lazy(() => import("./pages/service-areas"));
const CaseStudies = lazy(() => import("./pages/case-studies"));
const Reviews = lazy(() => import("./pages/reviews"));
const Sitemap = lazy(() => import("./pages/sitemap"));
const TenderLibrary = lazy(() => import("./pages/TenderLibrary"));
const ServiceManagement = lazy(() => import("./pages/ServiceManagement"));
const RBACManagement = lazy(() => import("./pages/rbac-management"));
const IpManagementDashboard = lazy(
() => import("./pages/IpManagementDashboard"),
);
// CRM Sub-pages
const CRMCustomers = lazy(() => import("./pages/crm/customers"));
const CRMSuppliers = lazy(() => import("./pages/crm/suppliers"));
const CRMContacts = lazy(() => import("./pages/crm/contacts"));
const CRMAddresses = lazy(() => import("./pages/crm/addresses"));
const Login = lazy(() => import("./core/pages/login"));
import SidebarNav from "./components/navigation/SidebarNav";
import CommandPalette from "./components/navigation/CommandPalette";
import { queryClient } from "./shared/utils/queryClient";
import {
BrandingProvider,
useBranding,
} from "./shared/contexts/BrandingContext";
import { useAuth } from "./shared/hooks/useAuth";
import RouteProtection from "./components/RouteProtection";
import AuthGuard from "./components/AuthGuard";
import AdminRoute from "./components/AdminRoute";
import BrandSEOManager from "./shared/components/BrandSEOManager";
import { Toaster } from "./shared/components/ui/toaster";
// Enhanced loading and error handling components
import PageLoader from "./shared/components/PageLoader";
import ErrorBoundary from "./shared/components/ErrorBoundary";
function AppLayout() {
const { isAegis360, currentBrand } = useBranding();
const { isAuthenticated } = useAuth();
// Only render sidebar for authenticated Aegis360 users
const shouldShowSidebar = isAegis360 && isAuthenticated && currentBrand;
return (
{shouldShowSidebar && }
);
}
function LoginRedirect() {
const [, setLocation] = useLocation();
useEffect(() => {
setLocation("/login");
}, [setLocation]);
return null;
}
function Router() {
return (
}>
{/* PROTECTED ADMIN/MANAGEMENT ROUTES - Require Authentication */}
{/* PROTECTED CRM Sub-pages - Require Authentication */}
{/* Marketing Strategy routes added here */}
{/* Previously missing routes - Adding now */}
{/* New Admin Monitoring & Communication Routes */}
{/* New Legal/Business Pages */}
{/* PROTECTED TENDER ROUTES - Require Authentication */}
);
}
function App() {
// TASK 2: Session depth tracking with route navigation monitoring
const [location] = useLocation();
useEffect(() => {
preloadCriticalRoutes();
}, []);
// TASK 2: Track feature access based on route navigation
useEffect(() => {
const routeToFeatureMap: Record = {
"/dashboard": FEATURES.DASHBOARD,
"/settings": FEATURES.SETTINGS,
"/reports": FEATURES.REPORTS,
"/treatment-reports": FEATURES.REPORTS,
"/survey-report": FEATURES.REPORTS,
"/crm": FEATURES.CRM,
"/quote": FEATURES.QUOTES,
"/quotation": FEATURES.QUOTES,
"/book": FEATURES.APPOINTMENTS,
"/analytics-dashboard": FEATURES.ANALYTICS,
"/unified-performance-dashboard": FEATURES.ANALYTICS,
"/seasonal-prevention-calendar": FEATURES.PREVENTION_CALENDAR,
"/iot-pest-sensors": FEATURES.IOT_SENSORS,
"/compliance-audit": FEATURES.COMPLIANCE,
"/pricing-admin": FEATURES.PRICING_ADMIN,
"/backend-admin": FEATURES.BACKEND_ADMIN,
"/mobile-pest-scanner": FEATURES.MOBILE_SCANNER,
"/ar-pest-identification": FEATURES.AR_PEST_LENS,
};
const featureName = routeToFeatureMap[location];
if (featureName) {
trackFeature(featureName);
}
// Track session depth on major navigation events
if (location !== "/" && location !== "/landing") {
trackSessionDepth();
}
}, [location]);
// TASK 2: Track session depth on page visibility change (user returns to tab)
useEffect(() => {
const handleVisibilityChange = () => {
if (document.visibilityState === "visible") {
trackSessionDepth();
}
};
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => {
document.removeEventListener("visibilitychange", handleVisibilityChange);
};
}, []);
// TASK 2: Track session depth before page unload
useEffect(() => {
const handleBeforeUnload = () => {
trackSessionDepth();
};
window.addEventListener("beforeunload", handleBeforeUnload);
return () => {
window.removeEventListener("beforeunload", handleBeforeUnload);
};
}, []);
return (
);
}
export default App;