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 { lazy, Suspense, useEffect } from "react";
import { HelmetProvider } from "react-helmet-async";
import { LanguageDetector } from "@/components/LanguageDetector";
import { LoadingScreen } from "@/components/LoadingScreen";
import { MaintenanceWrapper } from "@/components/MaintenanceWrapper";
import Index from "./pages/Index";

const Auth = lazy(() => import("./pages/Auth"));
const Admin = lazy(() => import("./pages/Admin"));
const BlogPost = lazy(() => import("./pages/BlogPost"));
const BlogArchive = lazy(() => import("./pages/BlogArchive"));
const TermsOfService = lazy(() => import("./pages/TermsOfService"));
const PrivacyPolicy = lazy(() => import("./pages/PrivacyPolicy"));
const Sitemap = lazy(() => import("./pages/Sitemap"));
const TikTokCallback = lazy(() => import("./pages/TikTokCallback"));
const NotFound = lazy(() => import("./pages/NotFound"));
const Maintenance = lazy(() => import("./pages/Maintenance"));
const ExclusiveVideo = lazy(() => import("./pages/ExclusiveVideo"));

const queryClient = new QueryClient();

const ScrollRestoration = () => {
  useEffect(() => {
    // Disable browser scroll restoration on refresh
    if ('scrollRestoration' in window.history) {
      window.history.scrollRestoration = 'manual';
    }

    // Always scroll to top on initial load/refresh
    window.scrollTo(0, 0);
  }, []);

  return null;
};

const App = () => (
  <HelmetProvider>
    <QueryClientProvider client={queryClient}>
      <TooltipProvider>
        <Toaster />
        <Sonner />
        <BrowserRouter>
          <ScrollRestoration />
          <LanguageDetector>
            <MaintenanceWrapper>
              <Suspense fallback={<LoadingScreen />}>
                <Routes>
                {/* Portuguese routes (default) */}
                <Route path="/" element={<Index />} />
                <Route path="/auth" element={<Auth />} />
                <Route path="/admin" element={<Admin />} />
                <Route path="/tiktok/callback" element={<TikTokCallback />} />
                <Route path="/blog" element={<BlogArchive />} />
                <Route path="/blog/:slug" element={<BlogPost />} />
                <Route path="/termos-de-servico" element={<TermsOfService />} />
                <Route path="/politica-de-privacidade" element={<PrivacyPolicy />} />
                <Route path="/exclusivo/:slug" element={<ExclusiveVideo />} />
                <Route path="/sitemap.xml" element={<Sitemap />} />

                {/* English routes */}
                <Route path="/en" element={<Index />} />
                <Route path="/en/auth" element={<Auth />} />
                <Route path="/en/admin" element={<Admin />} />
                <Route path="/en/blog" element={<BlogArchive />} />
                <Route path="/en/blog/:slug" element={<BlogPost />} />
                <Route path="/en/terms-of-service" element={<TermsOfService />} />
                <Route path="/en/privacy-policy" element={<PrivacyPolicy />} />
                <Route path="/en/exclusive/:slug" element={<ExclusiveVideo />} />

                {/* Spanish routes */}
                <Route path="/es" element={<Index />} />
                <Route path="/es/auth" element={<Auth />} />
                <Route path="/es/admin" element={<Admin />} />
                <Route path="/es/blog" element={<BlogArchive />} />
                <Route path="/es/blog/:slug" element={<BlogPost />} />
                <Route path="/es/terminos-de-servicio" element={<TermsOfService />} />
                <Route path="/es/politica-de-privacidad" element={<PrivacyPolicy />} />
                <Route path="/es/exclusivo/:slug" element={<ExclusiveVideo />} />

                {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
                <Route path="*" element={<NotFound />} />
                </Routes>
              </Suspense>
            </MaintenanceWrapper>
          </LanguageDetector>
        </BrowserRouter>
      </TooltipProvider>
    </QueryClientProvider>
  </HelmetProvider>
);

export default App;
