// =============================================================================
// 📦 ХУК ДЛЯ УПРАВЛЕНИЯ ДАННЫМИ ТОВАРОВ
// =============================================================================

import { useQuery } from '@apollo/client'
import { useMemo } from 'react'

import { GET_ORGANIZATION_PRODUCTS } from '@/graphql/queries'

import type { 
  FulfillmentConsumableSupplier,
  ProductsData,
  UseProductDataReturn,
  GraphQLQueryVariables,
} from '../types'

interface UseProductDataProps {
  selectedSupplier: FulfillmentConsumableSupplier | null
  productSearchQuery: string
}

export function useProductData({ 
  selectedSupplier, 
  productSearchQuery, 
}: UseProductDataProps): UseProductDataReturn {
  // Стабилизируем переменные для useQuery
  const queryVariables = useMemo((): GraphQLQueryVariables => {
    return {
      organizationId: selectedSupplier?.id || '',
      search: productSearchQuery || null,
      category: null,
      type: 'CONSUMABLE' as const, // Фильтруем только расходники согласно GraphQL правилам
    }
  }, [selectedSupplier?.id, productSearchQuery])

  // Загружаем товары для выбранного поставщика с фильтрацией по типу CONSUMABLE
  const {
    data,
    loading,
    error,
    refetch,
  } = useQuery<ProductsData>(GET_ORGANIZATION_PRODUCTS, {
    skip: !selectedSupplier?.id, // Не запрашиваем без выбранного поставщика
    variables: queryVariables,
    onCompleted: (data) => {
      // Логируем только количество загруженных товаров
      console.warn(`📦 Загружено товаров: ${data?.organizationProducts?.length || 0}`)
    },
    onError: (error) => {
      console.error('❌ GET_ORGANIZATION_PRODUCTS ERROR:', error)
    },
  })

  // Получаем товары поставщика (уже отфильтрованы в GraphQL запросе по типу CONSUMABLE)
  const products = useMemo(() => {
    return data?.organizationProducts || []
  }, [data?.organizationProducts])

  return {
    products,
    loading,
    error: error || null,
    refetch,
  }
}