import { hydrateRoot, createRoot } from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import { HelmetProvider } from "react-helmet-async";
import { AppContent, AppProviders } from "./App";
import { pages } from "./pages-lazy";
import RootErrorBoundary from "./components/RootErrorBoundary.tsx";
import "./index.css";

const tree = (
  <RootErrorBoundary>
    <HelmetProvider>
      <AppProviders>
        <BrowserRouter>
          <AppContent pages={pages} />
        </BrowserRouter>
      </AppProviders>
    </HelmetProvider>
  </RootErrorBoundary>
);

const rootEl = document.getElementById("root")!;

// If the build pipeline prerendered HTML into #root, hydrate it; otherwise
// (dev server, or a route the SSG step missed) do a fresh client render.
// Detect prerender by looking for any element child — the dev server's
// template ships an empty <div id="root"></div>.
if (rootEl.firstElementChild) {
  hydrateRoot(rootEl, tree);
} else {
  createRoot(rootEl).render(tree);
}
