/**
 * ХУКА ДЛЯ ЛОГИКИ КОРЗИНЫ ПОСТАВОК
 *
 * Выделена из create-suppliers-supply-page.tsx
 * Управляет корзиной товаров и настройками поставки
 */

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

import { CREATE_SUPPLY_ORDER } from '@/graphql/mutations'
import { CREATE_SELLER_GOODS_SUPPLY } from '@/graphql/mutations/seller-goods-v2'
import { adaptV1ToV2Format } from '@/lib/utils/recipe-transformer'

import type {
  SelectedGoodsItem,
  GoodsSupplier,
  GoodsProduct,
  ProductRecipe,
} from '../types/supply-creation.types'

interface UseSupplyCartProps {
  selectedSupplier: GoodsSupplier | null
  allCounterparties: GoodsSupplier[]
  productRecipes: Record<string, ProductRecipe>
}

export function useSupplyCart({ selectedSupplier, allCounterparties, productRecipes }: UseSupplyCartProps) {
  const router = useRouter()
  
  // Вариант 1: V2 СИСТЕМА (активный) - feature flag убран
  // Вариант 2: Feature flag (BACKUP для отката)
  // const USE_V2_GOODS_SYSTEM = process.env.NEXT_PUBLIC_USE_V2_GOODS === 'true'

  // Состояния корзины и настроек
  const [selectedGoods, setSelectedGoods] = useState<SelectedGoodsItem[]>([])
  const [deliveryDate, setDeliveryDate] = useState(() => {
    const tomorrow = new Date()
    tomorrow.setDate(tomorrow.getDate() + 1)
    return tomorrow.toISOString().split('T')[0] // Формат YYYY-MM-DD
  })
  const [selectedLogistics, setSelectedLogistics] = useState<string>('auto')
  const [selectedFulfillment, setSelectedFulfillment] = useState<string>('')
  const [isCreatingSupply, setIsCreatingSupply] = useState(false)

  // Вариант 1: Только V2 мутация (активный)
  const [createSupplyOrderV2] = useMutation(CREATE_SELLER_GOODS_SUPPLY)
  
  // Вариант 2: V1 мутация (BACKUP для отката)
  // const [createSupplyOrderV1] = useMutation(CREATE_SUPPLY_ORDER)

  // Получаем логистические компании
  const logisticsCompanies = useMemo(() => {
    return allCounterparties?.filter((partner) => partner.type === 'LOGIST') || []
  }, [allCounterparties])

  // Добавление товара в корзину
  const addToCart = (
    product: GoodsProduct,
    quantity: number,
    additionalData?: {
      completeness?: string
      recipe?: string
      specialRequirements?: string
      parameters?: Array<{ name: string; value: string }>
    },
  ) => {
    if (!selectedSupplier) {
      toast.error('Сначала выберите поставщика')
      return
    }

    if (quantity <= 0) {
      toast.error('Укажите количество товара')
      return
    }

    const existingItemIndex = selectedGoods.findIndex((item) => item.id === product.id)

    if (existingItemIndex >= 0) {
      // Обновляем существующий товар
      setSelectedGoods((prev) => {
        const updated = [...prev]
        updated[existingItemIndex] = {
          ...updated[existingItemIndex],
          selectedQuantity: quantity,
          ...additionalData,
        }
        return updated
      })
      toast.success('Количество товара обновлено')
    } else {
      // Добавляем новый товар
      const newItem: SelectedGoodsItem = {
        id: product.id,
        name: product.name,
        sku: product.article,
        price: product.price,
        selectedQuantity: quantity,
        unit: product.unit,
        category: product.category?.name,
        supplierId: selectedSupplier?.id || '',
        supplierName: selectedSupplier?.name || selectedSupplier?.fullName || '',
        completeness: additionalData?.completeness,
        recipe: additionalData?.recipe,
        specialRequirements: additionalData?.specialRequirements,
        parameters: additionalData?.parameters,
      }

      setSelectedGoods((prev) => [...prev, newItem])
      toast.success('Товар добавлен в корзину')
    }
  }

  // Удаление товара из корзины
  const removeFromCart = (itemId: string) => {
    setSelectedGoods((prev) => prev.filter((item) => item.id !== itemId))
    toast.success('Товар удален из корзины')
  }

  // Функция расчета полной стоимости товара с рецептурой
  const getProductTotalWithRecipe = useCallback(
    (productId: string, quantity: number) => {
      const product = selectedGoods.find((p) => p.id === productId)
      if (!product) return 0

      const baseTotal = product.price * quantity
      const recipe = productRecipes[productId]

      if (!recipe) return baseTotal

      // Здесь будет логика расчета стоимости услуг и расходников
      // Пока возвращаем базовую стоимость
      return baseTotal
    },
    [selectedGoods, productRecipes],
  )

  // Расчеты для корзины
  const totalGoodsAmount = useMemo(() => {
    return selectedGoods.reduce((sum, item) => {
      return sum + getProductTotalWithRecipe(item.id, item.selectedQuantity)
    }, 0)
  }, [selectedGoods, getProductTotalWithRecipe])

  const totalQuantity = useMemo(() => {
    return selectedGoods.reduce((sum, item) => sum + item.selectedQuantity, 0)
  }, [selectedGoods])

  // Валидация формы
  const hasRequiredServices = useMemo(() => {
    console.log('🔎 Проверка услуг для товаров:', {
      selectedGoods: selectedGoods.map(item => ({ id: item.id, name: item.name })),
      productRecipesKeys: Object.keys(productRecipes),
      productRecipes: productRecipes,
    })
    
    const result = selectedGoods.every((item) => {
      const hasServices = productRecipes[item.id]?.selectedServices?.length > 0
      console.log(`🔎 Товар ${item.name} (${item.id}): услуги = ${hasServices}`)
      return hasServices
    })
    
    return result
  }, [selectedGoods, productRecipes])

  const isFormValid = useMemo(() => {
    // Отладка валидации
    console.log('🔍 selectedSupplier:', !!selectedSupplier)
    console.log('🔍 selectedGoods.length:', selectedGoods.length)
    console.log('🔍 deliveryDate:', deliveryDate)
    console.log('🔍 selectedFulfillment:', selectedFulfillment)
    console.log('🔍 hasRequiredServices:', hasRequiredServices)
    console.log('🔍 productRecipes:', productRecipes)
    
    const result = selectedSupplier && selectedGoods.length > 0 && deliveryDate && selectedFulfillment && hasRequiredServices
    console.log('🔍 РЕЗУЛЬТАТ ВАЛИДАЦИИ:', result)
    
    return selectedSupplier && selectedGoods.length > 0 && deliveryDate && selectedFulfillment && hasRequiredServices
  }, [selectedSupplier, selectedGoods.length, deliveryDate, selectedFulfillment, hasRequiredServices, productRecipes])

  // Создание поставки
  const handleCreateSupply = async () => {
    console.warn('🎯 НАЧАЛО handleCreateSupply функции')
    console.warn('🔍 Проверка валидации:', { isFormValid, hasRequiredServices })
    
    if (!isFormValid) {
      console.warn('❌ Форма не валидна!')
      if (!hasRequiredServices) {
        toast.error('Каждый товар должен иметь минимум 1 услугу фулфилмента')
      } else {
        toast.error('Заполните все обязательные поля')
      }
      return
    }

    if (!selectedSupplier) {
      toast.error('Поставщик не выбран')
      return
    }

    setIsCreatingSupply(true)

    try {
      // Вариант 1: V2 СИСТЕМА (активный)
      // 🚀 V2 СИСТЕМА - Нормализованная рецептура
      console.log('🆕 Используем V2 систему для создания товарной поставки')
      
      const v2InputData = adaptV1ToV2Format(
        {
          partnerId: selectedSupplier?.id || '',
          fulfillmentCenterId: selectedFulfillment,
          deliveryDate: new Date(deliveryDate).toISOString(),
          logisticsPartnerId: selectedLogistics === 'auto' ? null : selectedLogistics,
          notes: selectedGoods
            .map((item) => item.specialRequirements)
            .filter(Boolean)
            .join('; '),
        },
        selectedGoods.map((item) => ({
            productId: item.id,
            quantity: item.selectedQuantity,
          })),
          productRecipes,
        )
        
        console.log('🔄 V2 данные для отправки:', JSON.stringify(v2InputData, null, 2))
        console.log('🔄 V2 recipeItems структура:', JSON.stringify(v2InputData.recipeItems, null, 2))
        console.log('🔄 Mutation CREATE_SELLER_GOODS_SUPPLY:', CREATE_SELLER_GOODS_SUPPLY)
        
        const result = await createSupplyOrderV2({
          variables: { input: v2InputData },
        })
        
        if (result.data?.createSellerGoodsSupply?.success) {
          toast.success('Поставка успешно создана через V2 систему!')
          router.push('/supplies')
        } else {
          throw new Error(result.data?.createSellerGoodsSupply?.message || 'Ошибка создания поставки')
        }

      // Вариант 2: V1 СИСТЕМА (BACKUP для отката)
      /*
      } else {
        // 📦 V1 СИСТЕМА - Старый формат (для обратной совместимости)
        console.log('📦 Используем V1 систему для создания товарной поставки')
        
        const inputData = {
          partnerId: selectedSupplier?.id || '',
          fulfillmentCenterId: selectedFulfillment,
          deliveryDate: new Date(deliveryDate).toISOString(),
          logisticsPartnerId: selectedLogistics === 'auto' ? null : selectedLogistics,
          items: selectedGoods.map((item) => {
            const recipe = productRecipes[item.id] || {
              productId: item.id,
              selectedServices: [],
              selectedFFConsumables: [],
              selectedSellerConsumables: [],
            }
            return {
              productId: item.id,
              quantity: item.selectedQuantity,
              recipe: {
                services: recipe.selectedServices || [],
                fulfillmentConsumables: recipe.selectedFFConsumables || [],
                sellerConsumables: recipe.selectedSellerConsumables || [],
                marketplaceCardId: recipe.selectedWBCard || null,
              },
            }
          }),
          notes: selectedGoods
            .map((item) => item.specialRequirements)
            .filter(Boolean)
            .join('; '),
        }
        
        console.warn('🔍 V1 данные для отправки:', JSON.stringify(inputData, null, 2))

        await createSupplyOrderV1({
          variables: { input: inputData },
        })
        
        toast.success('Поставка успешно создана!')
        router.push('/supplies')
      }
      */

    } catch (error) {
      console.error('❌ Ошибка создания поставки:', error)
      if (error instanceof Error) {
        toast.error(error.message)
      } else {
        toast.error('Ошибка при создании поставки')
      }
    } finally {
      setIsCreatingSupply(false)
    }
  }

  return {
    // Состояние корзины
    selectedGoods,
    setSelectedGoods,
    deliveryDate,
    setDeliveryDate,
    selectedLogistics,
    setSelectedLogistics,
    selectedFulfillment,
    setSelectedFulfillment,
    isCreatingSupply,

    // Данные
    logisticsCompanies,

    // Расчеты
    totalGoodsAmount,
    totalQuantity,

    // Валидация
    hasRequiredServices,
    isFormValid,

    // Функции управления корзиной
    addToCart,
    removeFromCart,
    getProductTotalWithRecipe,
    handleCreateSupply,
  }
}
