
import { StrictMode, useEffect } from "react";
import { hydrateRoot } from "react-dom/client";
import { BrowserRouter, Routes, Route, useLocation } from "react-router";
import "./i18n";
import App from "./app/App.tsx";
import { TeamPage } from "./app/pages/TeamPage.tsx";
import { PublishersPage } from "./app/pages/PublishersPage.tsx";
import { AuthorsPage } from "./app/pages/AuthorsPage.tsx";
import { GlossaryPage } from "./app/pages/GlossaryPage.tsx";
import { FeaturesPage } from "./app/pages/FeaturesPage.tsx";
import { BlogListPage } from "./app/pages/BlogListPage.tsx";
import { BlogPostPage } from "./app/pages/BlogPostPage.tsx";
import { FreeToolsPage } from "./app/pages/FreeToolsPage.tsx";
import { SubProcessorsPage } from "./app/pages/SubProcessorsPage.tsx";
import { ManifestoPage } from "./app/pages/ManifestoPage.tsx";
import { AudioPage } from "./app/pages/AudioPage.tsx";
import { AudioWutheringHeightsPage } from "./app/pages/AudioWutheringHeightsPage.tsx";
import { NotFoundPage } from "./app/pages/NotFoundPage.tsx";
import { ErrorBoundary } from "./app/components/ErrorBoundary.tsx";
import { LocaleLayout } from "./app/layouts/LocaleLayout.tsx";
import { CookieConsentProvider } from "./app/hooks/useCookieConsent.ts";
import { WaitlistProvider } from "./app/components/waitlist/WaitlistProvider.tsx";
import "./styles/index.css";

function ScrollToTop() {
  const { pathname } = useLocation();
  useEffect(() => {
    window.scrollTo(0, 0);
  }, [pathname]);
  return null;
}

const rootElement = document.getElementById("root");

if (!rootElement) {
  throw new Error("Root element not found");
}

hydrateRoot(
  rootElement,
  <StrictMode>
    <ErrorBoundary>
      <CookieConsentProvider>
      <WaitlistProvider>
      <BrowserRouter>
        <ScrollToTop />
        <Routes>
          {/* English (default, no prefix) */}
          <Route element={<LocaleLayout />}>
            <Route path="/" element={<App />} />
            <Route path="/team" element={<TeamPage />} />
            <Route path="/publishers" element={<PublishersPage />} />
            <Route path="/authors" element={<AuthorsPage />} />
            <Route path="/glossary" element={<GlossaryPage />} />
            <Route path="/features" element={<FeaturesPage />} />
            <Route path="/tools" element={<FreeToolsPage />} />
            <Route path="/sub-processors" element={<SubProcessorsPage />} />
            <Route path="/manifesto" element={<ManifestoPage />} />
            <Route path="/audio" element={<AudioPage variant="machine" />} />
            <Route path="/audio/gallery" element={<AudioPage variant="gallery" />} />
            <Route path="/audio/aloud" element={<AudioPage variant="aloud" />} />
            <Route path="/blog" element={<BlogListPage />} />
            <Route path="/blog/:slug" element={<BlogPostPage />} />
            <Route path="/audio/wuthering-heights" element={<AudioWutheringHeightsPage />} />
            <Route path="*" element={<NotFoundPage />} />
          </Route>

          {/* Locale-prefixed routes */}
          <Route path="/:locale" element={<LocaleLayout />}>
            <Route index element={<App />} />
            <Route path="team" element={<TeamPage />} />
            <Route path="publishers" element={<PublishersPage />} />
            <Route path="authors" element={<AuthorsPage />} />
            <Route path="glossary" element={<GlossaryPage />} />
            <Route path="features" element={<FeaturesPage />} />
            <Route path="tools" element={<FreeToolsPage />} />
            <Route path="sub-processors" element={<SubProcessorsPage />} />
            <Route path="manifesto" element={<ManifestoPage />} />
            <Route path="audio" element={<AudioPage variant="machine" />} />
            <Route path="audio/gallery" element={<AudioPage variant="gallery" />} />
            <Route path="audio/aloud" element={<AudioPage variant="aloud" />} />
            <Route path="blog" element={<BlogListPage />} />
            <Route path="blog/:slug" element={<BlogPostPage />} />
            <Route path="audio/wuthering-heights" element={<AudioWutheringHeightsPage />} />
            <Route path="*" element={<NotFoundPage />} />
          </Route>
        </Routes>
      </BrowserRouter>
      </WaitlistProvider>
      </CookieConsentProvider>
    </ErrorBoundary>
  </StrictMode>,
);
