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 } from "react-router-dom";
import { ThemeProvider } from "next-themes";
import { AuthProvider } from "@/hooks/useAuth";
import { I18nProvider } from "@/hooks/useI18n";
import { lazy, Suspense } from "react";
import { Skeleton } from "@/components/ui/skeleton";
import FloatingCopiedCoupon from "@/components/FloatingCopiedCoupon";
import CopyStreakIndicator from "@/components/CopyStreakIndicator";
import ScrollProgress from "@/components/ScrollProgress";
import ErrorBoundary from "@/components/ErrorBoundary";
import { trackAICitation } from "@/components/admin/AICitationTracker";

// Eager load: homepage (LCP critical)
import Index from "./pages/Index";

// Lazy load: all other pages
const CouponsPage = lazy(() => import("./pages/CouponsPage"));
const StoresPage = lazy(() => import("./pages/StoresPage"));
const StoreDetailPage = lazy(() => import("./pages/StoreDetailPage"));
const CategoriesPage = lazy(() => import("./pages/CategoriesPage"));
const SearchResultsPage = lazy(() => import("./pages/SearchResultsPage"));
const BlogPage = lazy(() => import("./pages/BlogPage"));
const BlogPostPage = lazy(() => import("./pages/BlogPostPage"));
const BlogTagPage = lazy(() => import("./pages/BlogTagPage"));
const ExclusivePage = lazy(() => import("./pages/ExclusivePage"));
const AboutPage = lazy(() => import("./pages/AboutPage"));
const ContactPage = lazy(() => import("./pages/ContactPage"));
const PrivacyPage = lazy(() => import("./pages/PrivacyPage"));
const TopCouponsPage = lazy(() => import("./pages/TopCouponsPage"));
const DealsPage = lazy(() => import("./pages/DealsPage"));
const FavoritesPage = lazy(() => import("./pages/FavoritesPage"));
const AdminLogin = lazy(() => import("./pages/admin/AdminLogin"));
const AdminDashboard = lazy(() => import("./pages/admin/AdminDashboard"));
const CouponSharePage = lazy(() => import("./pages/CouponSharePage"));
const StatsPage = lazy(() => import("./pages/StatsPage"));
const TrendingPage = lazy(() => import("./pages/TrendingPage"));
const StoreComparePage = lazy(() => import("./pages/StoreComparePage"));
const MostUsedPage = lazy(() => import("./pages/MostUsedPage"));
const SavingsPage = lazy(() => import("./pages/SavingsPage"));
const TodayDealsPage = lazy(() => import("./pages/TodayDealsPage"));
const FAQPage = lazy(() => import("./pages/FAQPage"));
const OccasionsPage = lazy(() => import("./pages/OccasionsPage"));
const RewardsPage = lazy(() => import("./pages/RewardsPage"));
const PublicStatsPage = lazy(() => import("./pages/PublicStatsPage"));
const MonthlyDealsPage = lazy(() => import("./pages/MonthlyDealsPage"));
const CompareCouponsPage = lazy(() => import("./pages/CompareCouponsPage"));
const VisitorStoreComparePage = lazy(() => import("./pages/VisitorStoreComparePage"));
const DiscoverStorePage = lazy(() => import("./pages/DiscoverStorePage"));
const DealsMapPage = lazy(() => import("./pages/DealsMapPage"));
const ExpiringSoonPage = lazy(() => import("./pages/ExpiringSoonPage"));
const ChangelogPublicPage = lazy(() => import("./pages/ChangelogPublicPage"));
const PersonalizedDealsPage = lazy(() => import("./pages/PersonalizedDealsPage"));
const SeasonalPage = lazy(() => import("./pages/SeasonalPage"));
const NotFound = lazy(() => import("./pages/NotFound"));

const PageLoader = () => (
  <div className="min-h-screen flex items-center justify-center">
    <div className="space-y-4 w-full max-w-2xl px-4">
      <Skeleton className="h-10 w-3/4 rounded-lg mx-auto" />
      <Skeleton className="h-6 w-1/2 rounded mx-auto" />
      <Skeleton className="h-64 w-full rounded-xl" />
    </div>
  </div>
);

const queryClient = new QueryClient();

// Track AI citations on load
if (typeof window !== 'undefined') {
  trackAICitation();
}

const App = () => (
  <ErrorBoundary>
  <ThemeProvider attribute="class" defaultTheme="light" enableSystem>
    <I18nProvider>
    <QueryClientProvider client={queryClient}>
      <AuthProvider>
        <TooltipProvider>
          <Toaster />
          <Sonner />
          <ScrollProgress />
          <BrowserRouter>
            <FloatingCopiedCoupon />
            <CopyStreakIndicator />
            <Suspense fallback={<PageLoader />}>
              <Routes>
                <Route path="/" element={<Index />} />
                <Route path="/search" element={<SearchResultsPage />} />
                <Route path="/coupons" element={<CouponsPage />} />
                <Route path="/top-coupons" element={<TopCouponsPage />} />
                <Route path="/stores" element={<StoresPage />} />
                <Route path="/stores/compare" element={<StoreComparePage />} />
                <Route path="/store/:slug" element={<StoreDetailPage />} />
                <Route path="/categories" element={<CategoriesPage />} />
                <Route path="/blog" element={<BlogPage />} />
                <Route path="/blog/tag/:slug" element={<BlogTagPage />} />
                <Route path="/blog/:slug" element={<BlogPostPage />} />
                <Route path="/exclusive" element={<ExclusivePage />} />
                <Route path="/about" element={<AboutPage />} />
                <Route path="/contact" element={<ContactPage />} />
                <Route path="/privacy" element={<PrivacyPage />} />
                <Route path="/deals" element={<DealsPage />} />
                <Route path="/coupon/:id" element={<CouponSharePage />} />
                <Route path="/stats" element={<StatsPage />} />
                <Route path="/trending" element={<TrendingPage />} />
                <Route path="/most-used" element={<MostUsedPage />} />
                <Route path="/savings" element={<SavingsPage />} />
                <Route path="/today-deals" element={<TodayDealsPage />} />
                <Route path="/faq" element={<FAQPage />} />
                <Route path="/occasions" element={<OccasionsPage />} />
                <Route path="/rewards" element={<RewardsPage />} />
                <Route path="/live-stats" element={<PublicStatsPage />} />
                <Route path="/monthly-deals" element={<MonthlyDealsPage />} />
                <Route path="/compare-coupons" element={<CompareCouponsPage />} />
                <Route path="/compare-stores" element={<VisitorStoreComparePage />} />
                <Route path="/discover" element={<DiscoverStorePage />} />
                <Route path="/deals-map" element={<DealsMapPage />} />
                <Route path="/expiring-soon" element={<ExpiringSoonPage />} />
                <Route path="/changelog" element={<ChangelogPublicPage />} />
                <Route path="/personalized" element={<PersonalizedDealsPage />} />
                <Route path="/favorites" element={<FavoritesPage />} />
                <Route path="/occasion/:occasion" element={<SeasonalPage />} />
                <Route path="/admin/login" element={<AdminLogin />} />
                <Route path="/admin" element={<AdminDashboard />} />
                <Route path="*" element={<NotFound />} />
              </Routes>
            </Suspense>
          </BrowserRouter>
        </TooltipProvider>
      </AuthProvider>
    </QueryClientProvider>
    </I18nProvider>
  </ThemeProvider>
  </ErrorBoundary>
);

export default App;
