import { QueryClient } from '@tanstack/react-query';

/**
 * QueryClient canônico do SAR.
 * Defaults conservadores: refetch on focus desabilitado (Visual DNA: "sereno"),
 * stale-while-revalidate para tempo real bater no Socket.IO, não em polling.
 */
export const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 30_000, // 30s — Socket.IO atualiza antes na maioria dos casos
      gcTime: 5 * 60_000, // 5min em cache antes de garbage collect
      refetchOnWindowFocus: false, // evita "refresh fantasma" — Sandra/Daniel se distraem
      refetchOnReconnect: true,
      retry: (failureCount, error) => {
        // 4xx não retry; 5xx até 2 retries
        const status = (error as { status?: number })?.status;
        if (status && status >= 400 && status < 500) return false;
        return failureCount < 2;
      },
      retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30_000),
    },
    mutations: {
      retry: false, // mutations não retry automático — Idempotency-Key no servidor cuida disso
    },
  },
});
