
import { Toaster } from "@/components/ui/toaster";
import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
import { lazy, Suspense, useEffect, useState } from 'react';
import ScrollToTop from "./components/ScrollToTop";
import { RouteAnalytics } from "./components/RouteAnalytics";
import BreadcrumbInjector from "./components/BreadcrumbInjector";
import LoadingSpinner from "./components/LoadingSpinner";
import { initGA } from "./lib/analytics";
import { initCustomAnalytics } from "./lib/customAnalytics";
import { resourcePreloader } from "./lib/resourcePreloader";
import { initPerformanceMonitoring } from "./lib/performanceMonitoring";

// Only Home is eagerly loaded — it's the primary landing page
import Home from "./pages/Home";

// Previously eager pages moved to lazy for smaller initial bundle
const FunnelLanding = lazy(() => import("./pages/FunnelLanding"));
const PreApproval = lazy(() => import("./pages/PreApproval"));
const Calculators = lazy(() => import("./pages/Calculators"));
const Contact = lazy(() => import("./pages/Contact"));

// Deferred components — only needed after scroll/interaction
const StickyFunnelBar = lazy(() => import("./components/funnel/StickyFunnelBar"));

// Lazy load remaining page components for code splitting
const Admin = lazy(() => import("./pages/Admin"));
const HELOC = lazy(() => import("./pages/HELOC"));

const Roster = lazy(() => import("./pages/Roster"));
const NotFound = lazy(() => import("./pages/NotFound"));
const MortgagePaymentCalculator = lazy(() => import("./pages/MortgagePaymentCalculator"));
const HomeAffordabilityCalculator = lazy(() => import("./pages/HomeAffordabilityCalculator"));
const RefinanceCalculator = lazy(() => import("./pages/RefinanceCalculator"));
const AmortizationCalculator = lazy(() => import("./pages/AmortizationCalculator"));
const PMICalculator = lazy(() => import("./pages/PMICalculator"));
const ExtraPaymentCalculator = lazy(() => import("./pages/ExtraPaymentCalculator"));
const MortgageCalculatorGuide = lazy(() => import("./pages/MortgageCalculatorGuide"));
const WindHailInsuranceArticle = lazy(() => import("./pages/WindHailInsuranceArticle"));
const DTICalculator = lazy(() => import("./pages/DTICalculator"));
const DSCRCalculator = lazy(() => import("./pages/DSCRCalculator"));
const FixAndFlipCalculator = lazy(() => import("./pages/FixAndFlipCalculator"));
const BRRRCalculator = lazy(() => import("./pages/BRRRCalculator"));
const FHAvsConventionalCalculator = lazy(() => import("./pages/FHAvsConventionalCalculator"));
const EmbeddedInquiry = lazy(() => import("./pages/EmbeddedInquiry"));
const CertificateOfOccupancyArticle = lazy(() => import("./pages/CertificateOfOccupancyArticle"));
const MortgageBrokerVsBankLender = lazy(() => import("./pages/MortgageBrokerVsBankLender"));
const HO6InsuranceArticle = lazy(() => import("./pages/HO6InsuranceArticle"));
const WarrantableVsNonWarrantableCondosArticle = lazy(() => import("./pages/WarrantableVsNonWarrantableCondosArticle"));
const FirstTimeHomebuyerMistakesArticle = lazy(() => import("./pages/FirstTimeHomebuyerMistakesArticle"));
const DiscountPointsLenderCreditsArticle = lazy(() => import("./pages/DiscountPointsLenderCreditsArticle"));
const ClosingCostsGuideArticle = lazy(() => import("./pages/ClosingCostsGuideArticle"));
const BirchwoodZero = lazy(() => import("./pages/BirchwoodZero"));
const BirchwoodZeroFlyer = lazy(() => import("./components/BirchwoodZeroFlyer"));
const Auburn2025MarketTrends = lazy(() => import("./pages/Auburn2025MarketTrends"));
const Top5LoanOptionsAlabama = lazy(() => import("./pages/Top5LoanOptionsAlabama"));
const Chapter13BankruptcyMortgageArticle = lazy(() => import("./pages/Chapter13BankruptcyMortgageArticle").then(module => ({ default: module.Chapter13BankruptcyMortgageArticle })));
const NoMoneyDownHomes2025 = lazy(() => import("./pages/NoMoneyDownHomes2025"));
const MultiFamilyFivePctDown = lazy(() => import("./pages/MultiFamilyFivePctDown"));
const UnderstandingMortgagePayments = lazy(() => import("./pages/UnderstandingMortgagePayments"));
const TemporaryBuydownArticle = lazy(() => import("./pages/TemporaryBuydownArticle"));
const BuydownCalculator = lazy(() => import("./pages/BuydownCalculator"));
const RateAlerts = lazy(() => import("./pages/RateAlerts"));
const MortgageRatesDeclineArticle = lazy(() => import("./pages/MortgageRatesDeclineArticle"));
const FedRateCutsMortgageArticle = lazy(() => import("./pages/FedRateCutsMortgageArticle"));
const RefinanceTimingArticle = lazy(() => import("./pages/RefinanceTimingArticle"));
const VAIRRLArticle = lazy(() => import("./pages/VAIRRLArticle"));
const RealEstateInvestmentTaxBenefitsArticle = lazy(() => import("./pages/RealEstateInvestmentTaxBenefitsArticle"));
const AuburnMortgageGuide = lazy(() => import("./pages/AuburnMortgageGuide"));
const CompleteAuburnHomeBuyingGuide2025 = lazy(() => import("./pages/CompleteAuburnHomeBuyingGuide2025"));
const USDAEligibilityChecker = lazy(() => import("./pages/USDAEligibilityChecker"));
const VALoanAlabamaGuide = lazy(() => import("./pages/VALoanAlabamaGuide"));
const BuyNowOrWaitArticle = lazy(() => import("./pages/BuyNowOrWaitArticle"));
const LoanOfficerProfile = lazy(() => import("./pages/LoanOfficerProfile"));
const AlabamaFirstTimeHomebuyerPrograms2025 = lazy(() => import("./pages/AlabamaFirstTimeHomebuyerPrograms2025"));
const LosAngelesHousingMarketArticle = lazy(() => import("./pages/LosAngelesHousingMarketArticle"));
const HousingDemandTrends2025 = lazy(() => import("./pages/HousingDemandTrends2025"));
const PropertyComparisonCalculator = lazy(() => import("./pages/PropertyComparisonCalculator"));
const DownPaymentGuideArticle = lazy(() => import("./pages/DownPaymentGuideArticle"));
const FannieMaeRateForecastArticle = lazy(() => import("./pages/FannieMaeRateForecastArticle"));
const SevenDayRefinanceArticle = lazy(() => import("./pages/SevenDayRefinanceArticle"));
const SelfEmployedMortgageGuideArticle = lazy(() => import("./pages/SelfEmployedMortgageGuideArticle"));
const AuburnShortTermRentalsArticle = lazy(() => import("./pages/AuburnShortTermRentalsArticle"));
const MortgageSpreadsExplainedArticle = lazy(() => import("./pages/MortgageSpreadsExplainedArticle"));
const ForeclosureTrendsHealthyMarket2026 = lazy(() => import("./pages/ForeclosureTrendsHealthyMarket2026"));
const AuburnOpelikaSchoolsNeighborhoods2025 = lazy(() => import("./pages/AuburnOpelikaSchoolsNeighborhoods2025"));
const AuburnNeighborhoodFinder = lazy(() => import("./pages/AuburnNeighborhoodFinder"));
const TeamRosterFlyer = lazy(() => import("./pages/TeamRosterFlyer"));
const LeeCountyJobGrowth2025 = lazy(() => import("./pages/LeeCountyJobGrowth2025"));
const SBALoanOptions = lazy(() => import("./pages/SBALoanOptions"));
const YearEndHomeBuying2025 = lazy(() => import("./pages/YearEndHomeBuying2025"));
const FirstTimeHomeBuyingProcessArticle = lazy(() => import("./pages/FirstTimeHomeBuyingProcessArticle"));
const CreditScoreMortgageGuide = lazy(() => import("./pages/CreditScoreMortgageGuide"));
const VantageScoreFICO10TMortgage2026 = lazy(() => import("./pages/VantageScoreFICO10TMortgage2026"));
const VacantLandLoansGuide = lazy(() => import("./pages/VacantLandLoansGuide"));
const StoneMartonBuildersArticle = lazy(() => import("./pages/StoneMartonBuildersArticle"));
const TrumpMBSPurchase2026 = lazy(() => import("./pages/TrumpMBSPurchase2026"));
const MortgageRatesStable2026 = lazy(() => import("./pages/MortgageRatesStable2026"));
const FHALoansAlabamaGuide = lazy(() => import("./pages/FHALoansAlabamaGuide"));
const HomeAppraisalGuide = lazy(() => import("./pages/HomeAppraisalGuide"));
const ConventionalLoansAlabamaGuide = lazy(() => import("./pages/ConventionalLoansAlabamaGuide"));
const MortgageRateForecast2026 = lazy(() => import("./pages/MortgageRateForecast2026"));
const LoanLimitsLookup = lazy(() => import("./pages/LoanLimitsLookup"));
const ConformingLoanLimits2026Article = lazy(() => import("./pages/ConformingLoanLimits2026Article"));
const LoanEstimateExplainer = lazy(() => import("./pages/LoanEstimateExplainer"));
const BuyersVsSellersDecember2025 = lazy(() => import("./pages/BuyersVsSellersDecember2025"));
const BiWeeklyPaymentCalculator = lazy(() => import("./pages/BiWeeklyPaymentCalculator"));
const BiWeeklyMortgagePaymentsGuide = lazy(() => import("./pages/BiWeeklyMortgagePaymentsGuide"));
const MortgagePreApprovalChecklist = lazy(() => import("./pages/MortgagePreApprovalChecklist"));
const HomeInspectionGuide = lazy(() => import("./pages/HomeInspectionGuide"));
const MortgageRates3YearLow2026 = lazy(() => import("./pages/MortgageRates3YearLow2026"));
const MortgageRatesIranSpike2026 = lazy(() => import("./pages/MortgageRatesIranSpike2026"));
const ClosingDisclosureTRIDArticle = lazy(() => import("./pages/ClosingDisclosureTRIDArticle"));
const LoanEstimateGuideArticle = lazy(() => import("./pages/LoanEstimateGuideArticle"));
const HowLongToCloseAlabamaArticle = lazy(() => import("./pages/HowLongToCloseAlabamaArticle"));
const Blog = lazy(() => import("./pages/Blog"));
const CityMortgagePage = lazy(() => import("./pages/CityMortgagePage"));
const ClosingCostEstimator = lazy(() => import("./pages/ClosingCostEstimator"));
const HowToEstimateClosingCostsArticle = lazy(() => import("./pages/HowToEstimateClosingCostsArticle"));
const AuburnMortgageLander = lazy(() => import("./pages/AuburnMortgageLander"));
const OpelikaMortgageLander = lazy(() => import("./pages/OpelikaMortgageLander"));
const SoutheastMortgageLender = lazy(() => import("./pages/SoutheastMortgageLender"));
const WeeklyRateUpdate = lazy(() => import("./pages/WeeklyRateUpdate"));
const BlogPost = lazy(() => import("./pages/BlogPost"));
const VABonusEntitlementCalculator = lazy(() => import("./pages/VABonusEntitlementCalculator"));
const RoadToHousingActArticle = lazy(() => import("./pages/RoadToHousingActArticle"));
const RentVsBuyCalculator = lazy(() => import("./pages/RentVsBuyCalculator"));
const FHAAmendatoryClauseArticle = lazy(() => import("./pages/FHAAmendatoryClauseArticle"));
const AppraisalWaiverArticle = lazy(() => import("./pages/AppraisalWaiverArticle"));
const SecondFHALoanExceptionsArticle = lazy(() => import("./pages/SecondFHALoanExceptionsArticle"));

const queryClient = new QueryClient();

import { HelmetProvider } from 'react-helmet-async';

const App = () => {
  const [showDeferred, setShowDeferred] = useState(false);

  useEffect(() => {
    // Initialize performance monitoring immediately
    initPerformanceMonitoring();
    
    // Prefetch likely next pages for instant navigation
    resourcePreloader.prefetchLikelyRoutes();
    
    // Defer analytics initialization to avoid blocking critical path
    const initAnalytics = () => {
      initGA();
      initCustomAnalytics();
    };

    if ('requestIdleCallback' in window) {
      (window as any).requestIdleCallback(initAnalytics, { timeout: 2000 });
    } else {
      setTimeout(initAnalytics, 1000);
    }

    // Show deferred components after idle
    const deferTimer = setTimeout(() => setShowDeferred(true), 3000);
    return () => clearTimeout(deferTimer);
  }, []);

  return (
  <QueryClientProvider client={queryClient}>
    <TooltipProvider>
      <HelmetProvider>
        <Toaster />
        <Sonner />
        <BrowserRouter>
          <ScrollToTop />
          <RouteAnalytics />
          <BreadcrumbInjector />
          {showDeferred && (
            <Suspense fallback={null}>
              <StickyFunnelBar
                ctaText="Get My Rate"
                subtitle="Check your rate — takes 2 minutes"
                showAfterScroll={500}
              />
            </Suspense>
          )}
          <Suspense fallback={<LoadingSpinner />}>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/home" element={<Navigate to="/" replace />} />
          <Route path="/get-started" element={<FunnelLanding />} />
          <Route path="/admin" element={<Admin />} />
          <Route path="/pre-approval" element={<PreApproval />} />
          <Route path="/HELOC" element={<HELOC />} />
          <Route path="/calculators" element={<Calculators />} />
          <Route path="/contact" element={<Contact />} />
          <Route path="/learn" element={<Blog />} />
          <Route path="/resources" element={<Navigate to="/learn" replace />} />
          <Route path="/blog" element={<Navigate to="/learn" replace />} />
          <Route path="/blog/:slug" element={<BlogPost />} />
        <Route path="/loan-officers" element={<Roster />} />
        <Route path="/roster" element={<Roster />} /> {/* Legacy route redirect */}
        <Route path="/join-team" element={<Roster />} /> {/* Legacy route redirect */}
        <Route path="/loan-officers/:slug" element={<LoanOfficerProfile />} />
        <Route path="/team-roster-flyer" element={<TeamRosterFlyer />} />
          {/* Mortgage Calculator Pages */}
          <Route path="/mortgage-payment-calculator" element={<MortgagePaymentCalculator />} />
          <Route path="/how-much-house-can-i-afford-calculator" element={<HomeAffordabilityCalculator />} />
          <Route path="/refinance-calculator" element={<RefinanceCalculator />} />
          <Route path="/mortgage-amortization-calculator" element={<AmortizationCalculator />} />
          <Route path="/pmi-calculator" element={<PMICalculator />} />
          <Route path="/extra-mortgage-payment-calculator" element={<ExtraPaymentCalculator />} />
          <Route path="/bi-weekly-payment-calculator" element={<BiWeeklyPaymentCalculator />} />
          <Route path="/bi-weekly-mortgage-payments-guide" element={<BiWeeklyMortgagePaymentsGuide />} />
          <Route path="/mortgage-calculator-guide" element={<MortgageCalculatorGuide />} />
          <Route path="/wind-hail-insurance-guide" element={<WindHailInsuranceArticle />} />
          <Route path="/debt-to-income-ratio-calculator" element={<DTICalculator />} />
          <Route path="/dscr-calculator" element={<DSCRCalculator />} />
          <Route path="/fix-and-flip-calculator" element={<FixAndFlipCalculator />} />
          <Route path="/brrr-calculator" element={<BRRRCalculator />} />
          <Route path="/auburn-short-term-rental-investment-guide" element={<AuburnShortTermRentalsArticle />} />
          <Route path="/fha-vs-conventional-calculator" element={<FHAvsConventionalCalculator />} />
          <Route path="/rate-alerts" element={<RateAlerts />} />
          <Route path="/embedded-inquiry" element={<EmbeddedInquiry />} />
        <Route path="/resources/certificate-of-occupancy-vs-certificate-of-completion-mortgage" element={<CertificateOfOccupancyArticle />} />
        <Route path="/resources/ho6-insurance-condo-townhome" element={<HO6InsuranceArticle />} />
        <Route path="/resources/warrantable-vs-non-warrantable-condos" element={<WarrantableVsNonWarrantableCondosArticle />} />
        <Route path="/mortgage-broker-vs-bank-lender" element={<MortgageBrokerVsBankLender />} />
        <Route path="/auburn-2025-market-trends" element={<Auburn2025MarketTrends />} />
        <Route path="/resources/top-5-loan-options-alabama" element={<Top5LoanOptionsAlabama />} />
        <Route path="/birchwood-zero" element={<BirchwoodZero />} />
        <Route path="/birchwood-zero-flyer" element={<BirchwoodZeroFlyer />} />
        <Route path="/no-money-down-homes-2025" element={<NoMoneyDownHomes2025 />} />
        <Route path="/resources/buy-multi-family-property-5-percent-down-fannie-mae" element={<MultiFamilyFivePctDown />} />
        <Route path="/first-time-homebuyer-mistakes" element={<FirstTimeHomebuyerMistakesArticle />} />
        <Route path="/understanding-mortgage-payments" element={<UnderstandingMortgagePayments />} />
        <Route path="/closing-costs-guide" element={<ClosingCostsGuideArticle />} />
        <Route path="/discount-points-lender-credits" element={<DiscountPointsLenderCreditsArticle />} />
        <Route path="/chapter-13-bankruptcy-mortgage-guide" element={<Chapter13BankruptcyMortgageArticle />} />
        <Route path="/temporary-buydown-guide" element={<TemporaryBuydownArticle />} />
        <Route path="/buydown-calculator" element={<BuydownCalculator />} />
         <Route path="/mortgage-rates-declining-2025" element={<MortgageRatesDeclineArticle />} />
          <Route path="/fed-rate-cuts-mortgage-disconnect" element={<FedRateCutsMortgageArticle />} />
           <Route path="/when-to-refinance-mortgage-2024" element={<RefinanceTimingArticle />} />
            <Route path="/real-estate-investment-tax-benefits" element={<RealEstateInvestmentTaxBenefitsArticle />} />
            <Route path="/auburn-alabama-mortgage-guide" element={<AuburnMortgageGuide />} />
        <Route path="/complete-auburn-alabama-home-buying-guide-2025" element={<CompleteAuburnHomeBuyingGuide2025 />} />
        <Route path="/usda-eligibility-checker" element={<USDAEligibilityChecker />} />
        <Route path="/va-loans-alabama-complete-guide" element={<VALoanAlabamaGuide />} />
        <Route path="/should-i-buy-now-or-wait-for-rates" element={<BuyNowOrWaitArticle />} />
        <Route path="/alabama-first-time-homebuyer-programs-2025" element={<AlabamaFirstTimeHomebuyerPrograms2025 />} />
            <Route path="/los-angeles-housing-market" element={<LosAngelesHousingMarketArticle />} />
            <Route path="/housing-demand-positive-trend-2025" element={<HousingDemandTrends2025 />} />
        <Route path="/down-payment-comparison-calculator" element={<PropertyComparisonCalculator />} />
        <Route path="/how-much-down-payment-house" element={<DownPaymentGuideArticle />} />
        <Route path="/fannie-mae-rate-forecast-2025" element={<FannieMaeRateForecastArticle />} />
         <Route path="/7-day-refinance-instant-title" element={<SevenDayRefinanceArticle />} />
            <Route path="/mortgage-spreads-explained" element={<MortgageSpreadsExplainedArticle />} />
            <Route path="/resources/foreclosure-trends-healthy-market-2026" element={<ForeclosureTrendsHealthyMarket2026 />} />
            <Route path="/auburn-opelika-schools-neighborhoods-2025" element={<AuburnOpelikaSchoolsNeighborhoods2025 />} />
            <Route path="/auburn-opelika-neighborhoods" element={<AuburnNeighborhoodFinder />} />
            <Route path="/lee-county-job-growth-2025" element={<LeeCountyJobGrowth2025 />} />
            <Route path="/sba-loan-options" element={<SBALoanOptions />} />
            <Route path="/year-end-home-buying-2025" element={<YearEndHomeBuying2025 />} />
            <Route path="/self-employed-mortgage-guide" element={<SelfEmployedMortgageGuideArticle />} />
            <Route path="/first-time-homebuyer-complete-guide" element={<FirstTimeHomeBuyingProcessArticle />} />
            <Route path="/credit-score-mortgage-rates-guide" element={<CreditScoreMortgageGuide />} />
            <Route path="/vantagescore-fico-10t-mortgage-2026" element={<VantageScoreFICO10TMortgage2026 />} />
            <Route path="/vacant-land-loans-guide" element={<VacantLandLoansGuide />} />
            <Route path="/stone-martin-builders-auburn-al" element={<StoneMartonBuildersArticle />} />
            <Route path="/trump-mortgage-backed-securities-2026" element={<TrumpMBSPurchase2026 />} />
            <Route path="/mortgage-rates-stable-2026" element={<MortgageRatesStable2026 />} />
            <Route path="/fha-loans-alabama-guide" element={<FHALoansAlabamaGuide />} />
            <Route path="/home-appraisal-guide" element={<HomeAppraisalGuide />} />
            <Route path="/conventional-loans-alabama-guide" element={<ConventionalLoansAlabamaGuide />} />
            <Route path="/mortgage-rate-forecast-2026" element={<MortgageRateForecast2026 />} />
            <Route path="/loan-limits-2026" element={<LoanLimitsLookup />} />
            <Route path="/conforming-loan-limits-2026" element={<ConformingLoanLimits2026Article />} />
            <Route path="/loan-estimate-explainer" element={<LoanEstimateExplainer />} />
            <Route path="/buyers-vs-sellers-december-2025" element={<BuyersVsSellersDecember2025 />} />
            <Route path="/mortgage-pre-approval-checklist" element={<MortgagePreApprovalChecklist />} />
            <Route path="/home-inspection-guide" element={<HomeInspectionGuide />} />
            <Route path="/mortgage-rates-3-year-low-2026" element={<MortgageRates3YearLow2026 />} />
            <Route path="/mortgage-rates-iran-spike-2026" element={<MortgageRatesIranSpike2026 />} />
            <Route path="/va-irrl-streamline-refinance" element={<VAIRRLArticle />} />
            <Route path="/closing-disclosure-trid-timeline" element={<ClosingDisclosureTRIDArticle />} />
            <Route path="/loan-estimate-guide" element={<LoanEstimateGuideArticle />} />
            <Route path="/how-long-to-close-alabama" element={<HowLongToCloseAlabamaArticle />} />
            <Route path="/mortgage-lender/:city" element={<CityMortgagePage />} />
            <Route path="/closing-cost-estimator" element={<ClosingCostEstimator />} />
            <Route path="/how-to-estimate-closing-costs" element={<HowToEstimateClosingCostsArticle />} />
            <Route path="/auburn-alabama-mortgage-lender" element={<AuburnMortgageLander />} />
            <Route path="/opelika-alabama-mortgage-lender" element={<OpelikaMortgageLander />} />
            <Route path="/southeast-mortgage-lender" element={<SoutheastMortgageLender />} />
            <Route path="/mortgage-rates-today" element={<WeeklyRateUpdate />} />
            <Route path="/mortgage-rates-today/:slug" element={<WeeklyRateUpdate />} />
            {/* Legacy redirect */}
            <Route path="/mortgage-rates-this-week" element={<Navigate to="/mortgage-rates-today" replace />} />
            <Route path="/mortgage-rates-this-week/:slug" element={<Navigate to="/mortgage-rates-today" replace />} />
            <Route path="/va-bonus-entitlement-calculator" element={<VABonusEntitlementCalculator />} />
            <Route path="/road-to-housing-act-home-affordability-2026" element={<RoadToHousingActArticle />} />
            <Route path="/rent-vs-buy-calculator" element={<RentVsBuyCalculator />} />
            <Route path="/fha-amendatory-clause" element={<FHAAmendatoryClauseArticle />} />
            <Route path="/appraisal-3-day-waiver" element={<AppraisalWaiverArticle />} />
            <Route path="/can-you-have-two-fha-loans" element={<SecondFHALoanExceptionsArticle />} />
            {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
          <Route path="*" element={<NotFound />} />
        </Routes>
          </Suspense>
      </BrowserRouter>
      </HelmetProvider>
    </TooltipProvider>
  </QueryClientProvider>
);
}

export default App;
