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 } from "react";
import BreadcrumbSchema from "./components/BreadcrumbSchema";
import BreadcrumbsComponent from "./components/BreadcrumbsComponent";
import DynamicBreadcrumbSchema from "./components/DynamicBreadcrumbSchema";
import ErrorBoundary from "./components/ErrorBoundary";

// Loading component
const PageLoader = () => (
  <div className="min-h-screen flex items-center justify-center">
    <div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary"></div>
  </div>
);

// Lazy load pages for better performance
const Index = lazy(() => import("./pages/Index"));
const AboutUs = lazy(() => import("./pages/AboutUs"));
const ServicesPage = lazy(() => import("./pages/ServicesPage"));
const PricesPage = lazy(() => import("./pages/PricesPage"));
const GalleryPage = lazy(() => import("./pages/GalleryPage"));
const ContactPage = lazy(() => import("./pages/ContactPage"));
const BlogPage = lazy(() => import("./pages/BlogPage"));
const NotFound = lazy(() => import("./pages/NotFound"));

// Lazy load location pages
const AerocityPage = lazy(() => import("./pages/AerocityPage"));
const DelhiAirportPage = lazy(() => import("./pages/DelhiAirportPage"));
const VasantKunjPage = lazy(() => import("./pages/VasantKunjPage"));
const DwarkaPage = lazy(() => import("./pages/DwarkaPage"));
const GurgaonPage = lazy(() => import("./pages/GurgaonPage"));

// Lazy load service pages
const BanyaServicePage = lazy(() => import("./pages/services/BanyaServicePage"));
const DeepTissueServicePage = lazy(() => import("./pages/services/DeepTissueServicePage"));
const SwedishServicePage = lazy(() => import("./pages/services/SwedishServicePage"));
const ThaiServicePage = lazy(() => import("./pages/services/ThaiServicePage"));
const AromatherapyServicePage = lazy(() => import("./pages/services/AromatherapyServicePage"));
const CouplesServicePage = lazy(() => import("./pages/services/CouplesServicePage"));
const RussianSpaPage = lazy(() => import("./pages/services/RussianSpaPage"));
const BodyMassagePage = lazy(() => import("./pages/services/BodyMassagePage"));
const FullBodyMassagePage = lazy(() => import("./pages/services/FullBodyMassagePage"));
const CoupleMassagePage = lazy(() => import("./pages/services/CoupleMassagePage"));

// Lazy load blog posts
const DelhiAirportLayoverSpa = lazy(() => import("./pages/blog/DelhiAirportLayoverSpa"));
const RussianBanyaGuide = lazy(() => import("./pages/blog/RussianBanyaGuide"));
const DeepTissueVsSwedish = lazy(() => import("./pages/blog/DeepTissueVsSwedish"));
const CouplesSpaAerocity = lazy(() => import("./pages/blog/CouplesSpaAerocity"));
const SpaLayoverGuide = lazy(() => import("./pages/blog/SpaLayoverGuide"));
const WinterSpaBenefits = lazy(() => import("./pages/blog/WinterSpaBenefits"));
const CorporateWellness = lazy(() => import("./pages/blog/CorporateWellness"));

// New comprehensive blog posts (January 2026)
const CompleteRussianBanyaGuide = lazy(() => import("./pages/blog/CompleteRussianBanyaGuide"));
const MassageTherapyHealthBenefits = lazy(() => import("./pages/blog/MassageTherapyHealthBenefits"));
const BestSpaServicesMahipalpur = lazy(() => import("./pages/blog/BestSpaServicesMahipalpur"));
const CouplesSpaGuide = lazy(() => import("./pages/blog/CouplesSpaGuide"));
const AirportSpaGuide = lazy(() => import("./pages/blog/AirportSpaGuide"));
const TwentyFourHourSpaServices = lazy(() => import("./pages/blog/TwentyFourHourSpaServices"));

// 2026 Targeted SEO Blogs
const BestSpaNearAirportT3 = lazy(() => import("./pages/blog/BestSpaNearAirportT3"));
const RussianBanyaVsSwedish = lazy(() => import("./pages/blog/RussianBanyaVsSwedish"));
const CouplesSpaMahipalpurBlog = lazy(() => import("./pages/blog/CouplesSpaMahipalpurBlog"));
const BestSpaInAerocity = lazy(() => import("./pages/blog/BestSpaInAerocity"));

// Lazy load additional pages
const BanyaAerocityPage = lazy(() => import("./pages/locations/BanyaAerocityPage"));
const DeepTissueAerocityPage = lazy(() => import("./pages/locations/DeepTissueAerocityPage"));
const ComparisonPage = lazy(() => import("./pages/ComparisonPage"));
const SpecialOffersPage = lazy(() => import("./pages/SpecialOffersPage"));
const MassageTypesPage = lazy(() => import("./pages/MassageTypesPage"));
const TestimonialsPage = lazy(() => import("./pages/TestimonialsPage"));
const SpaBenefitsFAQPage = lazy(() => import("./pages/SpaBenefitsFAQPage"));
const UltimateSpaGuide = lazy(() => import("./pages/UltimateSpaGuide"));
const SpaIGIAirportPage = lazy(() => import("./pages/SpaIGIAirportPage"));
const BestRussianSpaMahipalpur = lazy(() => import("./pages/BestRussianSpaMahipalpur"));
const SpaNearIGIAirportDelhi = lazy(() => import("./pages/SpaNearIGIAirportDelhi"));
const MahipalpurPage = lazy(() => import("./pages/MahipalpurPage"));

// Lazy load new SEO content pages
const BestSpaMahipalpur = lazy(() => import("./pages/BestSpaMahipalpur"));
const MassageServicesMahipalpur = lazy(() => import("./pages/MassageServicesMahipalpur"));
const RussianSpaNearDelhiAirport = lazy(() => import("./pages/RussianSpaNearDelhiAirport"));
const CouplesSpaMahipalpur = lazy(() => import("./pages/CouplesSpaMahipalpur"));
const TwentyFourHourSpaMahipalpur = lazy(() => import("./pages/TwentyFourHourSpaMahipalpur"));

const queryClient = new QueryClient();

const App = () => (
  <QueryClientProvider client={queryClient}>
    <TooltipProvider>
      <Toaster />
      <Sonner />
      <BrowserRouter>
        <ErrorBoundary>
          <BreadcrumbSchema />
          <DynamicBreadcrumbSchema />
          <BreadcrumbsComponent />
          <Suspense fallback={<PageLoader />}>
            <Routes>
            {/* New location routes */}
            <Route path="/aerocity" element={<Navigate to="/best-spa-near-aerocity" replace />} />
            <Route path="/best-spa-near-aerocity" element={<AerocityPage />} />
            <Route path="/delhi-airport" element={<DelhiAirportPage />} />
            <Route path="/vasant-kunj" element={<VasantKunjPage />} />
            <Route path="/dwarka" element={<DwarkaPage />} />
            <Route path="/gurgaon" element={<GurgaonPage />} />

            {/* New service detail routes */}
            <Route path="/services/banya" element={<BanyaServicePage />} />
            <Route path="/services/deep-tissue" element={<DeepTissueServicePage />} />
            <Route path="/services/swedish" element={<SwedishServicePage />} />
            <Route path="/services/thai" element={<ThaiServicePage />} />
            <Route path="/services/aromatherapy" element={<AromatherapyServicePage />} />
            <Route path="/services/couples" element={<CouplesServicePage />} />
            <Route path="/services/russian-spa" element={<RussianSpaPage />} />
            <Route path="/services/body-massage" element={<BodyMassagePage />} />
            <Route path="/services/full-body-massage" element={<FullBodyMassagePage />} />
            <Route path="/services/couple-massage" element={<CoupleMassagePage />} />

            {/* Blog routes */}
            <Route path="/blog/airport-layover-spa" element={<DelhiAirportLayoverSpa />} />
            <Route path="/blog/russian-banya-guide" element={<RussianBanyaGuide />} />
            <Route path="/blog/deep-tissue-vs-swedish" element={<DeepTissueVsSwedish />} />
            <Route path="/blog/couples-spa-aerocity" element={<CouplesSpaAerocity />} />
            <Route path="/blog/spa-layover-guide" element={<SpaLayoverGuide />} />
            <Route path="/blog/winter-spa-benefits" element={<WinterSpaBenefits />} />
            <Route path="/blog/corporate-wellness" element={<CorporateWellness />} />
            
            {/* New comprehensive blog posts (January 2026) */}
            <Route path="/blog/complete-russian-banya-guide" element={<CompleteRussianBanyaGuide />} />
            <Route path="/blog/massage-therapy-health-benefits" element={<MassageTherapyHealthBenefits />} />
            <Route path="/blog/best-spa-services-mahipalpur" element={<BestSpaServicesMahipalpur />} />
            <Route path="/blog/couples-spa-guide" element={<CouplesSpaGuide />} />
            <Route path="/blog/airport-spa-guide" element={<AirportSpaGuide />} />
            <Route path="/blog/24-hour-spa-services" element={<TwentyFourHourSpaServices />} />
            
            {/* 2026 Targeted SEO Blogs */}
            <Route path="/blog/best-spa-near-delhi-airport" element={<BestSpaNearAirportT3 />} />
            <Route path="/blog/russian-banya-vs-swedish-massage" element={<RussianBanyaVsSwedish />} />
            <Route path="/blog/couples-spa-mahipalpur" element={<CouplesSpaMahipalpurBlog />} />
            <Route path="/blog/best-spa-in-aerocity" element={<BestSpaInAerocity />} />

            {/* Location-specific service pages */}
            <Route path="/locations/banya-aerocity" element={<BanyaAerocityPage />} />
            <Route path="/locations/deep-tissue-aerocity" element={<DeepTissueAerocityPage />} />
            
            {/* Comparison and info pages */}
            <Route path="/comparison" element={<ComparisonPage />} />
            <Route path="/special-offers" element={<SpecialOffersPage />} />
            <Route path="/massage-types" element={<MassageTypesPage />} />
            <Route path="/testimonials" element={<TestimonialsPage />} />
            <Route path="/spa-faq" element={<SpaBenefitsFAQPage />} />
            <Route path="/ultimate-spa-guide" element={<UltimateSpaGuide />} />
            <Route path="/spa-near-igi-airport" element={<SpaIGIAirportPage />} />
            
            {/* SEO Landing Pages */}
            <Route path="/best-russian-spa-mahipalpur" element={<Navigate to="/" replace />} />
            <Route path="/spa-near-igi-airport-delhi" element={<Navigate to="/best-spa-near-aerocity" replace />} />
            <Route path="/spa-in-mahipalpur" element={<Navigate to="/" replace />} />
            
            {/* New SEO Content Pages */}
            <Route path="/best-spa-mahipalpur" element={<Navigate to="/" replace />} />
            <Route path="/massage-services-mahipalpur" element={<Navigate to="/services" replace />} />
            <Route path="/russian-spa-near-delhi-airport" element={<Navigate to="/" replace />} />
            <Route path="/couples-spa-mahipalpur" element={<Navigate to="/services/couples" replace />} />
            <Route path="/24-hour-spa-mahipalpur" element={<Navigate to="/" replace />} />

            {/* Existing routes */}
            <Route path="/" element={<Index />} />
            <Route path="/about" element={<AboutUs />} />
            <Route path="/services" element={<ServicesPage />} />
            <Route path="/prices" element={<PricesPage />} />
            <Route path="/gallery" element={<GalleryPage />} />
            <Route path="/contact" element={<ContactPage />} />
            <Route path="/blog" element={<BlogPage />} />

            {/* Catch-all */}
            <Route path="*" element={<NotFound />} />
          </Routes>
          </Suspense>
        </ErrorBoundary>
      </BrowserRouter>
    </TooltipProvider>
  </QueryClientProvider>
);

export default App;
