'use client';

import { ReactNode, useEffect } from 'react';
import { useQueryClient } from '@tanstack/react-query';
import { cacheKeys } from '@/lib/api-cache';

interface AdminQueryProviderProps {
  children: ReactNode;
}

/**
 * Провайдер для react-query в админке
 * Оборачивает все компоненты админки и предоставляет доступ к QueryClient
 * и оптимизирует работу с кэшем
 */
export function AdminQueryProvider({ children }: AdminQueryProviderProps) {
  // Используем существующий QueryClient из корневого провайдера
  const queryClient = useQueryClient();

  // Предварительная загрузка часто используемых данных
  useEffect(() => {
    // Предзагрузка категорий
    queryClient.prefetchQuery({
      queryKey: [cacheKeys.categories],
      queryFn: async () => {
        try {
          const response = await fetch('/api/catalog/categories');
          if (!response.ok) throw new Error('Failed to fetch categories');
          return await response.json();
        } catch (error) {
          console.error('Error prefetching categories:', error);
          return [];
        }
      },
      staleTime: 5 * 60 * 1000, // 5 минут
    });

    // Предзагрузка коллекций
    queryClient.prefetchQuery({
      queryKey: [cacheKeys.collections],
      queryFn: async () => {
        try {
          const response = await fetch('/api/catalog/collections');
          if (!response.ok) throw new Error('Failed to fetch collections');
          return await response.json();
        } catch (error) {
          console.error('Error prefetching collections:', error);
          return [];
        }
      },
      staleTime: 5 * 60 * 1000, // 5 минут
    });

    // Предзагрузка размеров
    queryClient.prefetchQuery({
      queryKey: [cacheKeys.sizes],
      queryFn: async () => {
        try {
          const response = await fetch('/api/catalog/sizes');
          if (!response.ok) throw new Error('Failed to fetch sizes');
          return await response.json();
        } catch (error) {
          console.error('Error prefetching sizes:', error);
          return [];
        }
      },
      staleTime: 5 * 60 * 1000, // 5 минут
    });
  }, [queryClient]);

  return <>{children}</>;
}

export default AdminQueryProvider;
