// =============================================================================
// 🚀 ХУК ДЛЯ СОЗДАНИЯ ПОСТАВКИ СЕЛЛЕРА
// =============================================================================

import { useMutation } from '@apollo/client'
import { useRouter } from 'next/navigation'
import { useState, useCallback } from 'react'
import { toast } from 'sonner'

import {
  CREATE_SELLER_CONSUMABLE_SUPPLY,
  GET_MY_SELLER_CONSUMABLE_SUPPLIES,
} from '@/graphql/queries/seller-consumables-v2'

import type { 
  SellerConsumableSupplier,
  SelectedSellerConsumable,
  SellerSupplyCreationInput,
  CreateSellerSupplyMutationResponse,
  UseSellerSupplyCreationReturn,
  UseSellerSupplyCreationProps, 
} from '../types/seller-types'

export function useSellerSupplyCreation({
  selectedSupplier,
  selectedFulfillment,
  selectedConsumables,
  deliveryDate,
  notes,
  resetForm,
}: UseSellerSupplyCreationProps): UseSellerSupplyCreationReturn {
  const router = useRouter()
  const [isCreating, setIsCreating] = useState(false)
  const [error, setError] = useState<string | null>(null)

  // Мутация для создания заказа поставки расходников селлера
  const [createSupplyMutation] = useMutation<CreateSellerSupplyMutationResponse>(CREATE_SELLER_CONSUMABLE_SUPPLY)

  // Функция создания поставки
  const createSupply = useCallback(async () => {
    // 🔍 ВАЛИДАЦИЯ ОБЯЗАТЕЛЬНЫХ ПОЛЕЙ ДЛЯ СЕЛЛЕРА
    if (!selectedSupplier || !selectedFulfillment || selectedConsumables.length === 0 || !deliveryDate) {
      const errorMessage = 'Заполните все обязательные поля: поставщик, фулфилмент-центр, расходники и дата доставки'
      setError(errorMessage)
      toast.error(errorMessage)
      return
    }

    setIsCreating(true)
    setError(null)

    try {
      // 📊 ПОДГОТОВКА ДАННЫХ ДЛЯ СОЗДАНИЯ ПОСТАВКИ
      const input: SellerSupplyCreationInput = {
        fulfillmentCenterId: selectedFulfillment.id,  // 🏢 Куда доставлять
        supplierId: selectedSupplier.id,              // 🏪 От кого заказывать
        requestedDeliveryDate: deliveryDate,          // 📅 Когда нужно
        items: selectedConsumables.map((consumable) => ({
          productId: consumable.id,
          requestedQuantity: consumable.selectedQuantity,
        })),
        notes: notes || undefined,
      }

      console.log('🚀 Создание поставки селлера с данными:', input)

      // 🔄 ВЫПОЛНЕНИЕ МУТАЦИИ
      const result = await createSupplyMutation({
        variables: { input },
        refetchQueries: [
          {
            query: GET_MY_SELLER_CONSUMABLE_SUPPLIES,
          },
        ],
        awaitRefetchQueries: true,
      })

      const response = result.data?.createSellerConsumableSupply

      if (response?.success) {
        // ✅ УСПЕШНОЕ СОЗДАНИЕ
        toast.success(response.message || 'Поставка успешно создана')
        
        // Очищаем форму
        resetForm()
        
        // Переходим к списку поставок селлера
        // TODO: Создать маршрут для списка поставок селлера
        // router.push('/seller-supplies')
        
        console.log('✅ Поставка селлера создана:', response.supplyOrder)
      } else {
        // ❌ ОШИБКА ИЗ СЕРВЕРА
        const errorMessage = response?.message || 'Ошибка создания поставки'
        setError(errorMessage)
        toast.error(errorMessage)
      }
    } catch (err: any) {
      // ❌ ОШИБКА ВЫПОЛНЕНИЯ
      console.error('❌ Ошибка создания поставки селлера:', err)
      
      const errorMessage = err?.message || err?.graphQLErrors?.[0]?.message || 'Неизвестная ошибка при создании поставки'
      setError(errorMessage)
      toast.error(errorMessage)
    } finally {
      setIsCreating(false)
    }
  }, [
    selectedSupplier,
    selectedFulfillment,
    selectedConsumables,
    deliveryDate,
    notes,
    createSupplyMutation,
    resetForm,
    router,
  ])

  return {
    createSupply,
    isCreating,
    error,
  }
}