import { createRouter, RouterProvider } from "@tanstack/react-router";
import { StrictMode } from "react";
import ReactDOM from "react-dom/client";
import { WagmiProvider } from "wagmi";
import "./index.css";
import { queryClient } from "./lib/queryClient";
import { QueryProvider } from "./providers/QueryProvider";
import { GTMProvider } from "./providers/GTMProvider";
import { routeTree } from "./routeTree.gen";

import { config } from "./lib/wagmi/config";

// Create a new router instance
const router = createRouter({
  routeTree,
  context: {
    queryClient,
  },
  defaultPreload: "intent",
  // Since we're using React Query, we don't want loader calls to ever be stale
  // This will ensure that the loader is always called when the route is preloaded or visited
  defaultPreloadStaleTime: 0,
  scrollRestoration: true,
});

// Register the router instance for type safety
declare module "@tanstack/react-router" {
  interface Register {
    router: typeof router;
  }
}

// Render the app
const rootElement = document.getElementById("root")!;
if (!rootElement.innerHTML) {
  const root = ReactDOM.createRoot(rootElement);
  root.render(
    <StrictMode>
      <WagmiProvider config={config}>
        <QueryProvider>
          <GTMProvider>
            <RouterProvider router={router} />
          </GTMProvider>
        </QueryProvider>
      </WagmiProvider>
    </StrictMode>
  );
}
