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 { AuthProvider } from "@/hooks/useAuth";
import ProtectedRoute from "@/components/ProtectedRoute";
import { AnalyticsProvider } from "@/components/analytics/AnalyticsProvider";

import { LoadingBar } from "@/components/common/LoadingBar";
import { LoadingSkeleton } from "@/components/common/LoadingSkeleton";
import { PageTransition } from "@/components/PageTransition";
import { PageViewTracker } from "@/components/PageViewTracker";
import { ErrorBoundary } from "@/components/common/ErrorBoundary";
import { LazyLoadErrorBoundary } from "@/components/common/LazyLoadErrorBoundary";
import { Suspense, useEffect, useState } from "react";
import { lazyWithRetry, checkChunkLoadFailure } from "@/lib/lazyWithRetry";
import { useNetworkStatus } from "@/hooks/useNetworkStatus";
import { useWebVitals } from "@/hooks/useWebVitals";
import { usePageLoadTime } from "@/hooks/usePageLoadTime";

// Performance tracking component
function PerformanceTracker() {
  useWebVitals();
  usePageLoadTime();
  return null;
}

import { SkipToContent } from "@/components/common/SkipToContent";
import { KeyboardShortcutsModal } from "@/components/common/KeyboardShortcutsModal";
import GoogleTagManager from "@/components/GoogleTagManager";
import GoogleAnalytics from "@/components/GoogleAnalytics";

// ============================================
// ROUTE-BASED CODE SPLITTING WITH RETRY LOGIC
// Organized into ~25 chunks instead of 150+
// ============================================

// Core pages (with retry logic for resilient loading)
const Home = lazyWithRetry(() => import(/* webpackChunkName: "route-home" */ "./pages/Home"));
const CampaignPage = lazyWithRetry(() => import(/* webpackChunkName: "route-campaign" */ "./pages/CampaignPage"));
const Auth = lazyWithRetry(() => import(/* webpackChunkName: "route-auth" */ "./pages/Auth"));
const NotFound = lazyWithRetry(() => import(/* webpackChunkName: "route-misc" */ "./pages/NotFound"));

// Route groups - each loads as a single chunk with retry
const AboutRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-about" */ "./routes/AboutRoutes"));
const AcademicsRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-academics" */ "./routes/AcademicsRoutes"));
const StudentLifeRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-student-life" */ "./routes/StudentLifeRoutes"));
const AdmissionsRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-admissions" */ "./routes/AdmissionsRoutes"));
const MediaRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-media" */ "./routes/MediaRoutes"));
const ParentRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-parent" */ "./routes/ParentRoutes"));
const CareerRoutes = lazyWithRetry(() => import(/* webpackChunkName: "route-career" */ "./routes/CareerRoutes"));

// Admin - separate chunk group with retry
const AdminLayout = lazyWithRetry(() => import(/* webpackChunkName: "admin-core" */ "./pages/admin/AdminLayout"));
const AdminRoutes = lazyWithRetry(() => import(/* webpackChunkName: "admin-routes" */ "./routes/AdminRoutes"));

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 5 * 60 * 1000, // 5 minutes
      gcTime: 10 * 60 * 1000, // 10 minutes
      refetchOnWindowFocus: false,
      refetchOnMount: false,
      retry: 2, // Retry failed queries twice
    },
  },
});

// Loading fallback component with timeout message
const PageLoader = () => {
  const [showSlowMessage, setShowSlowMessage] = useState(false);
  
  useEffect(() => {
    const timer = setTimeout(() => setShowSlowMessage(true), 5000);
    return () => clearTimeout(timer);
  }, []);
  
  return (
    <div className="min-h-screen flex flex-col items-center justify-center bg-background">
      <LoadingSkeleton variant="grid" count={3} />
      {showSlowMessage && (
        <p className="mt-4 text-sm text-muted-foreground animate-fade-in">
          Taking longer than expected...
        </p>
      )}
    </div>
  );
};

// Network status monitor component
const NetworkMonitor = () => {
  useNetworkStatus({ showToasts: true });
  return null;
};

const App = () => {
  // Check if page was refreshed due to chunk load failure
  useEffect(() => {
    if (checkChunkLoadFailure()) {
      console.log('[App] Page refreshed after chunk load failure');
    }
  }, []);

  return (
    <QueryClientProvider client={queryClient}>
      <TooltipProvider>
        <Toaster />
        <Sonner />
        
        <BrowserRouter>
          <LoadingBar />
          <NetworkMonitor />
          <AuthProvider>
            <AnalyticsProvider>
            <ErrorBoundary>
              <GoogleTagManager />
              <GoogleAnalytics />
              <SkipToContent />
              <KeyboardShortcutsModal />
              <PageViewTracker />
              <main id="main-content" tabIndex={-1} className="min-h-screen w-full outline-none">
                
                <LazyLoadErrorBoundary>
                  <Suspense fallback={<PageLoader />}>
                    <Routes>
                      <Route element={<PageTransition />}>
                        {/* Home */}
                        <Route path="/" element={<Home />} />
                        <Route path="/home" element={<Navigate to="/" replace />} />
                        <Route path="/hero-block" element={<Navigate to="/" replace />} />
                        
                        {/* Legacy URL Redirects - prevent soft 404s and 3XX chains */}
                        <Route path="/about" element={<Navigate to="/our-story" replace />} />
                        <Route path="/facilities" element={<Navigate to="/features" replace />} />
                        <Route path="/transport" element={<Navigate to="/transport-routes" replace />} />
                        <Route path="/calendar" element={<Navigate to="/school-calendar" replace />} />
                        <Route path="/prospectus" element={<Navigate to="/digital-prospectus" replace />} />
                        <Route path="/reviews" element={<Navigate to="/testimonials" replace />} />
                        <Route path="/cbse-board-school-east-delhi" element={<Navigate to="/best-cbse-school-east-delhi" replace />} />
                        <Route path="/cbse-board-exam-preparation" element={<Navigate to="/cbse-school-mayur-vihar" replace />} />
                        
                        {/* Campaign Landing Page - Same as homepage with separate tracking */}
                        <Route path="/lp" element={<CampaignPage />} />
                        
                        {/* About Section */}
                        <Route path="/our-story" element={<AboutRoutes />} />
                        <Route path="/vision-mission" element={<AboutRoutes />} />
                        <Route path="/leadership" element={<AboutRoutes />} />
                        <Route path="/why-choose" element={<AboutRoutes />} />
                        <Route path="/partners" element={<AboutRoutes />} />
                        <Route path="/testimonials" element={<AboutRoutes />} />
                        <Route path="/contact" element={<AboutRoutes />} />
                        
                        {/* Academics Section */}
                        <Route path="/academies" element={<AcademicsRoutes />} />
                        <Route path="/teachers" element={<AcademicsRoutes />} />
                        <Route path="/results" element={<AcademicsRoutes />} />
                        <Route path="/features" element={<AcademicsRoutes />} />
                        <Route path="/awards" element={<AcademicsRoutes />} />
                        <Route path="/achievers" element={<AcademicsRoutes />} />
                        
                        {/* Student Life Section */}
                        <Route path="/student-council" element={<StudentLifeRoutes />} />
                        <Route path="/house-system" element={<StudentLifeRoutes />} />
                        <Route path="/mental-health" element={<StudentLifeRoutes />} />
                        <Route path="/school-calendar" element={<StudentLifeRoutes />} />
                        <Route path="/alumni-support" element={<StudentLifeRoutes />} />
                        <Route path="/alumni" element={<StudentLifeRoutes />} />
                        <Route path="/safety-security" element={<StudentLifeRoutes />} />
                        <Route path="/hall-of-fame" element={<StudentLifeRoutes />} />
                        
                        {/* Admissions Section */}
                        <Route path="/admissions" element={<AdmissionsRoutes />} />
                        <Route path="/admissions-landing" element={<AdmissionsRoutes />} />
                        <Route path="/admissions/:city" element={<AdmissionsRoutes />} />
                        {/* Location-specific admission pages for local SEO */}
                        <Route path="/admission-patparganj" element={<AdmissionsRoutes />} />
                        <Route path="/admission-ip-extension" element={<AdmissionsRoutes />} />
                        <Route path="/admission-preet-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-mayur-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-laxmi-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-timeline" element={<AdmissionsRoutes />} />
                        <Route path="/detailed-admission" element={<AdmissionsRoutes />} />
                        <Route path="/fees" element={<AdmissionsRoutes />} />
                        <Route path="/transport-routes" element={<AdmissionsRoutes />} />
                        <Route path="/transfer-certificate" element={<AdmissionsRoutes />} />
                        {/* Location-specific landing pages for hyper-local SEO */}
                        <Route path="/best-school-mayur-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-preet-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-ip-extension" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-laxmi-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-patparganj" element={<AdmissionsRoutes />} />
                        {/* East Delhi landing pages */}
                        <Route path="/schools-in-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-east-delhi-comparison" element={<AdmissionsRoutes />} />
                        <Route path="/best-cbse-school-east-delhi" element={<AdmissionsRoutes />} />
                        
{/* Keyword Cluster Landing Pages for SEO */}
                        <Route path="/cbse-school-mayur-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/cbse-school-preet-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/senior-secondary-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/nursery-admission-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/primary-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/middle-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/iit-jee-preparation-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/english-medium-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/day-school-patparganj" element={<AdmissionsRoutes />} />
                        <Route path="/neet-preparation-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/cuet-preparation-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/kg-admission-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/play-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/school-admission-2025-26-delhi" element={<AdmissionsRoutes />} />
                        
                        {/* New Location-specific pages */}
                        <Route path="/admission-anand-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-shahdara" element={<AdmissionsRoutes />} />
                        <Route path="/admission-vivek-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-karkardooma" element={<AdmissionsRoutes />} />
                        <Route path="/admission-dilshad-garden" element={<AdmissionsRoutes />} />
                        <Route path="/admission-gandhi-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-pandav-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-gazipur" element={<AdmissionsRoutes />} />
                        <Route path="/admission-new-ashok-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/admission-vasundhara-enclave" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-anand-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-shahdara" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-vivek-vihar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-karkardooma" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-dilshad-garden" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-gandhi-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-pandav-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-gazipur" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-new-ashok-nagar" element={<AdmissionsRoutes />} />
                        <Route path="/best-school-vasundhara-enclave" element={<AdmissionsRoutes />} />
                        
                        {/* New Keyword Cluster Pages */}
                        <Route path="/olympiad-coaching-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/nda-preparation-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/ntse-preparation-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/class-6-8-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/class-9-10-cbse-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/lateral-entry-admission-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/smart-classroom-school-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/sports-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/co-ed-school-east-delhi" element={<AdmissionsRoutes />} />
                        <Route path="/day-boarding-school-delhi" element={<AdmissionsRoutes />} />
                        
                        {/* Media Section */}
                        <Route path="/gallery" element={<MediaRoutes />} />
                        <Route path="/blogs" element={<MediaRoutes />} />
                        <Route path="/blogs/:id" element={<MediaRoutes />} />
                        <Route path="/events" element={<MediaRoutes />} />
                        <Route path="/media" element={<MediaRoutes />} />
                        <Route path="/announcements" element={<MediaRoutes />} />
                        <Route path="/digital-prospectus" element={<MediaRoutes />} />
                        
                        {/* Parent Section */}
                        <Route path="/parent-resources" element={<ParentRoutes />} />
                        <Route path="/parent-resources/:resourceId" element={<ParentRoutes />} />
                        <Route path="/parent-feedback" element={<ParentRoutes />} />
                        <Route path="/downloads" element={<ParentRoutes />} />
                        <Route path="/faqs" element={<ParentRoutes />} />
                        <Route path="/digital-library" element={<ParentRoutes />} />
                        <Route path="/apps" element={<ParentRoutes />} />
                        
                        {/* Career Section */}
                        <Route path="/career-counseling" element={<CareerRoutes />} />
                        <Route path="/career-counseling/:serviceId" element={<CareerRoutes />} />
                        <Route path="/franchise" element={<CareerRoutes />} />
                        
                        {/* Auth */}
                        <Route path="/auth" element={<Auth />} />
                        
                        {/* Admin Section */}
                        <Route
                          path="/admin/*"
                          element={
                            <ProtectedRoute requireAdmin>
                              <AdminLayout />
                            </ProtectedRoute>
                          }
                        >
                          <Route path="*" element={<AdminRoutes />} />
                        </Route>
                        
                        {/* Catch-all */}
                        <Route path="*" element={<NotFound />} />
                      </Route>
                    </Routes>
                  </Suspense>
                </LazyLoadErrorBoundary>
              </main>
            </ErrorBoundary>
            </AnalyticsProvider>
            <PerformanceTracker />
          </AuthProvider>
        </BrowserRouter>
      </TooltipProvider>
    </QueryClientProvider>
  );
};

export default App;
