import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { RouterProvider, createRouter } from "@tanstack/react-router";
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";

import "@tabler/core/dist/css/tabler.min.css";
import "@tabler/core/dist/css/tabler-themes.min.css";
import "@tabler/core/dist/js/tabler.esm.min.js";
import "./index.css";

import { DialogProvider, ToastContainer } from "./components/ui";
import { routeTree } from "./routeTree.gen";

// Toggle the in-browser API mock. Defaults to enabled in dev so the UI works
// without a backend; set VITE_USE_MOCK_API=false to talk to a real API.
const useMockApi =
  (import.meta.env.VITE_USE_MOCK_API ?? (import.meta.env.DEV ? "true" : "false"))
    .toString()
    .toLowerCase() !== "false";

if (useMockApi) {
  const { setupMockApi } = await import("./api/mock");
  setupMockApi();
}

const router = createRouter({ routeTree });

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retry: 1,
      refetchOnWindowFocus: false,
    },
  },
});

declare module "@tanstack/react-router" {
  interface Register {
    router: typeof router;
  }
}

createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <QueryClientProvider client={queryClient}>
      <DialogProvider>
        <RouterProvider router={router} />
        <ToastContainer />
      </DialogProvider>
    </QueryClientProvider>
  </StrictMode>,
);
