
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter } from "react-router-dom";
import { AuthProvider } from "@/contexts/AuthContext";
import { ThemeProvider } from "@/components/theme-provider";
import { ConnectivityProvider } from "@/services/connectivity-service";
import { OfflineRecordingManager } from "@/components/recording/OfflineRecordingManager";
import { ErrorBoundary } from "@/components/error/ErrorBoundary";
import { MobileBottomNav } from "@/components/ui/mobile/MobileBottomNav";
import { RoutesWithTracking } from "@/components/routing/RoutesWithTracking";
import { DeviceProvider } from "@/contexts/DeviceContext";

// Create a client with optimized settings for performance
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      refetchOnWindowFocus: false,
      retry: false, // Disable retries initially to reduce main-thread work
      staleTime: 10 * 60 * 1000, // 10 minutes - longer stale time
      gcTime: 15 * 60 * 1000, // 15 minutes - longer garbage collection time
    },
    mutations: {
      retry: false, // Disable retries for mutations initially
    },
  },
});

// Standard routing

const App = () => (
  <ErrorBoundary>
    <QueryClientProvider client={queryClient}>
      <TooltipProvider>
        <ConnectivityProvider>
          <BrowserRouter future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
            <AuthProvider>
              <ThemeProvider defaultTheme="light" storageKey="vite-ui-theme">
                <DeviceProvider>
                  <OfflineRecordingManager />
                  {/* Mobile bottom navigation removed - user doesn't want menus on mobile */}
                  {/* <MobileBottomNav /> */}

                  {/* Routes with GTM tracking */}
                  <RoutesWithTracking />
                </DeviceProvider>
              </ThemeProvider>
            </AuthProvider>
          </BrowserRouter>
        </ConnectivityProvider>
      </TooltipProvider>
    </QueryClientProvider>
  </ErrorBoundary>
);

export default App;
