'use client';

import { useState } from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { RegionProvider } from '@/contexts/region-context';
import { OrganizationProvider } from '@/contexts/OrganizationContext';
import { ConfirmProvider } from '@/components/common/feedback/ConfirmProvider';
import { AuthBootstrap } from '@/components/common/AuthBootstrap';
import { NoOrganizationBanner } from '@/components/common/NoOrganizationBanner';

export function Providers({ children }: { children: React.ReactNode }) {
  // useState 避免 React strict-mode 双调用造成 client 重新创建
  const [queryClient] = useState(
    () =>
      new QueryClient({
        defaultOptions: {
          queries: {
            staleTime: 5 * 60 * 1000, // 5 分钟内同 key 不重拉
            gcTime: 10 * 60 * 1000, // 10 分钟内缓存保留
            refetchOnWindowFocus: false, // 切回 tab 不打扰
            retry: 1,
          },
        },
      }),
  );

  return (
    <QueryClientProvider client={queryClient}>
      <RegionProvider>
        <AuthBootstrap />
        <OrganizationProvider>
          <NoOrganizationBanner />
          <ConfirmProvider>{children}</ConfirmProvider>
        </OrganizationProvider>
      </RegionProvider>
    </QueryClientProvider>
  );
}
