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

import './styles/global.css'
import { AuthProvider } from './auth/AuthProvider'
import { createAppRouter } from './router'

const router = createAppRouter()

/**
 * `retry: false` em erro de autorização não faz sentido — repetir um 401 ou 403
 * não muda a resposta e só multiplica requisição. Deixamos a decisão de repetir
 * para quem conhece o caso, não como default global.
 */
const queryClient = new QueryClient({
  defaultOptions: { queries: { retry: false, refetchOnWindowFocus: false } },
})

const raiz = document.getElementById('root')
if (!raiz) throw new Error('elemento #root não encontrado')

createRoot(raiz).render(
  <StrictMode>
    <QueryClientProvider client={queryClient}>
      {/* AuthProvider por fora do router: a guarda de rota consome a sessão. */}
      <AuthProvider>
        <RouterProvider router={router} />
      </AuthProvider>
    </QueryClientProvider>
  </StrictMode>,
)
