/**
 * ХУКА ДЛЯ РАБОТЫ С ТОВАРАМИ WILDBERRIES
 *
 * Выделена из direct-supply-creation.tsx
 * Управляет загрузкой и поиском карточек товаров WB
 */

import { useState, useEffect, useCallback } from 'react'

import { useAuthContext } from '@/contexts/AuthContext'
import { WildberriesService } from '@/services/wildberries-service'
import { WildberriesCard } from '@/types/supplies'

import type { UseWildberriesProductsReturn } from '../types/direct-supply.types'

// Моковые данные товаров для демонстрации
const getMockCards = (): WildberriesCard[] => [
  {
    nmID: 123456789,
    vendorCode: 'SKU001',
    title: 'Платье летнее розовое',
    description: 'Легкое летнее платье из натурального хлопка',
    brand: 'Fashion',
    object: 'Платья',
    parent: 'Одежда',
    countryProduction: 'Россия',
    supplierVendorCode: 'SUPPLIER-001',
    mediaFiles: ['/api/placeholder/400/400'],
    dimensions: {
      length: 30, // 30 см
      width: 25, // 25 см
      height: 5, // 5 см
      weightBrutto: 0.3, // 300г
      isValid: true,
    },
    sizes: [
      {
        chrtID: 123456,
        techSize: 'M',
        wbSize: 'M Розовый',
        price: 2500,
        discountedPrice: 2000,
        quantity: 50,
      },
    ],
  },
  {
    nmID: 987654321,
    vendorCode: 'SKU002',
    title: 'Платье черное вечернее',
    description: 'Элегантное вечернее платье для особых случаев',
    brand: 'Fashion',
    object: 'Платья',
    parent: 'Одежда',
    countryProduction: 'Россия',
    supplierVendorCode: 'SUPPLIER-002',
    mediaFiles: ['/api/placeholder/400/403'],
    dimensions: {
      length: 35, // 35 см
      width: 28, // 28 см
      height: 6, // 6 см
      weightBrutto: 0.4, // 400г
      isValid: true,
    },
    sizes: [
      {
        chrtID: 987654,
        techSize: 'M',
        wbSize: 'M Черный',
        price: 3500,
        discountedPrice: 3000,
        quantity: 30,
      },
    ],
  },
  {
    nmID: 555666777,
    vendorCode: 'SKU003',
    title: 'Блузка белая офисная',
    description: 'Классическая белая блузка для офиса',
    brand: 'Office',
    object: 'Блузки',
    parent: 'Одежда',
    countryProduction: 'Турция',
    supplierVendorCode: 'SUPPLIER-003',
    mediaFiles: ['/api/placeholder/400/405'],
    sizes: [
      {
        chrtID: 555666,
        techSize: 'L',
        wbSize: 'L Белый',
        price: 1800,
        discountedPrice: 1500,
        quantity: 40,
      },
    ],
  },
  {
    nmID: 444333222,
    vendorCode: 'SKU004',
    title: 'Джинсы женские синие',
    description: 'Классические женские джинсы прямого кроя',
    brand: 'Denim',
    object: 'Джинсы',
    parent: 'Одежда',
    countryProduction: 'Бангладеш',
    supplierVendorCode: 'SUPPLIER-004',
    mediaFiles: ['/api/placeholder/400/408'],
    sizes: [
      {
        chrtID: 444333,
        techSize: '30',
        wbSize: '30 Синий',
        price: 2800,
        discountedPrice: 2300,
        quantity: 25,
      },
    ],
  },
  {
    nmID: 111222333,
    vendorCode: 'SKU005',
    title: 'Кроссовки женские белые',
    description: 'Удобные женские кроссовки для повседневной носки',
    brand: 'Sport',
    object: 'Кроссовки',
    parent: 'Обувь',
    countryProduction: 'Вьетнам',
    supplierVendorCode: 'SUPPLIER-005',
    mediaFiles: ['/api/placeholder/400/410'],
    sizes: [
      {
        chrtID: 111222,
        techSize: '37',
        wbSize: '37 Белый',
        price: 3200,
        discountedPrice: 2800,
        quantity: 35,
      },
    ],
  },
  {
    nmID: 777888999,
    vendorCode: 'SKU006',
    title: 'Сумка женская черная',
    description: 'Стильная женская сумка из экокожи',
    brand: 'Accessories',
    object: 'Сумки',
    parent: 'Аксессуары',
    countryProduction: 'Китай',
    supplierVendorCode: 'SUPPLIER-006',
    mediaFiles: ['/api/placeholder/400/411'],
    sizes: [
      {
        chrtID: 777888,
        techSize: 'Универсальный',
        wbSize: 'Черный',
        price: 1500,
        discountedPrice: 1200,
        quantity: 60,
      },
    ],
  },
]

export function useWildberriesProducts(): UseWildberriesProductsReturn {
  const { user } = useAuthContext()

  const [searchTerm, setSearchTerm] = useState('')
  const [loading, setLoading] = useState(false)
  const [wbCards, setWbCards] = useState<WildberriesCard[]>([])

  // Загрузка всех карточек
  const loadCards = useCallback(async () => {
    setLoading(true)
    try {
      const wbApiKey = user?.organization?.apiKeys?.find((key) => key.marketplace === 'WILDBERRIES')

      if (wbApiKey?.isActive) {
        const validationData = wbApiKey.validationData as Record<string, string>
        const apiToken =
          validationData?.token ||
          validationData?.apiKey ||
          validationData?.key ||
          (wbApiKey as { apiKey?: string }).apiKey

        if (apiToken) {
          console.warn('Загружаем карточки из WB API...')
          const cards = await WildberriesService.getAllCards(apiToken, 500)

          // Логируем информацию о размерах товаров
          cards.forEach((card) => {
            if (card.dimensions) {
              const volume =
                (card.dimensions.length / 100) * (card.dimensions.width / 100) * (card.dimensions.height / 100)
              console.warn(
                `WB API: Карточка ${card.nmID} - размеры: ${card.dimensions.length}x${card.dimensions.width}x${
                  card.dimensions.height
                } см, объем: ${volume.toFixed(6)} м³`,
              )
            } else {
              console.warn(`WB API: Карточка ${card.nmID} - размеры отсутствуют`)
            }
          })

          setWbCards(cards)
          console.warn('Загружено карточек из WB API:', cards.length)
          console.warn('Карточки с размерами:', cards.filter((card) => card.dimensions).length)
          return
        }
      }

      // Если API ключ не настроен, показываем моковые данные
      console.warn('API ключ WB не настроен, показываем моковые данные')
      setWbCards(getMockCards())
    } catch (error) {
      console.error('Ошибка загрузки карточек WB:', error)
      // При ошибке API показываем моковые данные
      setWbCards(getMockCards())
    } finally {
      setLoading(false)
    }
  }, [user])

  // Поиск карточек
  const searchCards = useCallback(async () => {
    if (!searchTerm.trim()) {
      loadCards()
      return
    }

    setLoading(true)
    try {
      const wbApiKey = user?.organization?.apiKeys?.find((key) => key.marketplace === 'WILDBERRIES')

      if (wbApiKey?.isActive) {
        const validationData = wbApiKey.validationData as Record<string, string>
        const apiToken =
          validationData?.token ||
          validationData?.apiKey ||
          validationData?.key ||
          (wbApiKey as { apiKey?: string }).apiKey

        if (apiToken) {
          console.warn('Поиск в WB API:', searchTerm)
          const cards = await WildberriesService.searchCards(apiToken, searchTerm, 100)

          // Логируем информацию о размерах найденных товаров
          cards.forEach((card) => {
            if (card.dimensions) {
              const volume =
                (card.dimensions.length / 100) * (card.dimensions.width / 100) * (card.dimensions.height / 100)
              console.warn(
                `WB API: Найденная карточка ${card.nmID} - размеры: ${
                  card.dimensions.length
                }x${card.dimensions.width}x${card.dimensions.height} см, объем: ${volume.toFixed(6)} м³`,
              )
            } else {
              console.warn(`WB API: Найденная карточка ${card.nmID} - размеры отсутствуют`)
            }
          })

          setWbCards(cards)
          console.warn('Найдено карточек в WB API:', cards.length)
          console.warn('Найденные карточки с размерами:', cards.filter((card) => card.dimensions).length)
          return
        }
      }

      // Если API ключ не настроен, ищем в моковых данных
      console.warn('API ключ WB не настроен, поиск в моковых данных:', searchTerm)
      const mockCards = getMockCards()
      const filteredCards = mockCards.filter(
        (card) =>
          card.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
          card.description?.toLowerCase().includes(searchTerm.toLowerCase()) ||
          card.vendorCode.toLowerCase().includes(searchTerm.toLowerCase()),
      )
      setWbCards(filteredCards)
      console.warn('Найдено в моковых данных:', filteredCards.length)
    } catch (error) {
      console.error('Ошибка поиска карточек WB:', error)
      // При ошибке API ищем в моковых данных
      const mockCards = getMockCards()
      const filteredCards = mockCards.filter(
        (card) =>
          card.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
          card.description?.toLowerCase().includes(searchTerm.toLowerCase()) ||
          card.vendorCode.toLowerCase().includes(searchTerm.toLowerCase()),
      )
      setWbCards(filteredCards)
    } finally {
      setLoading(false)
    }
  }, [searchTerm, user, loadCards])

  // Автозагрузка при инициализации
  useEffect(() => {
    loadCards()
  }, [user, loadCards])

  return {
    searchTerm,
    setSearchTerm,
    loading,
    wbCards,
    loadCards,
    searchCards,
  }
}
