import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./index.css";
import App from "./App.tsx";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { Toaster } from "./components/ui/sonner.tsx";
import AuthProvider from "./context/auth-context.tsx";
import { DialogProvider } from "./context/dialog-context.tsx";
import { ThemeProvider } from "./context/theme-context.tsx";
import { BrowserRouter as Router } from "react-router-dom";
import "./lib/i18n.ts";
import ErrorBoundary from "./components/error-boundary";

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 30_000,
      gcTime: 5 * 60_000,
      retry: 1,
      refetchOnWindowFocus: false,
    },
    mutations: {
      retry: 0,
    },
  },
});

createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <Router>
      <ThemeProvider>
        <QueryClientProvider client={queryClient}>
          <Toaster position="top-center" richColors />
          <DialogProvider>
            <AuthProvider>
              <ErrorBoundary>
                <App />
              </ErrorBoundary>
            </AuthProvider>
          </DialogProvider>
        </QueryClientProvider>
      </ThemeProvider>
    </Router>
  </StrictMode>
);
