import { useMemo } from 'react'

import type { UseWarehouseStatsReturn, WarehouseStats } from '../types'

/**
 * Хук для вычисления статистики склада
 * 
 * Функциональность:
 * - Расчет поступлений расходников и товаров за сутки
 * - Формирование объекта warehouseStats из GraphQL данных
 * - Обработка состояний загрузки и fallback значений
 * - Логирование отладочной информации
 */
export function useWarehouseStats(
  supplyOrders: any[],
  warehouseStatsData: any,
  warehouseStatsLoading: boolean,
  sellerSupplies: any[] = [],
): UseWarehouseStatsReturn {
  
  // === РАСЧЕТ ПОСТУПЛЕНИЙ РАСХОДНИКОВ ЗА СУТКИ ===
  
  const suppliesReceivedToday = useMemo(() => {
    const deliveredOrders = supplyOrders.filter((o) => o.status === 'DELIVERED')

    // Подсчитываем расходники селлера из доставленных заказов за последние сутки
    const oneDayAgo = new Date()
    oneDayAgo.setDate(oneDayAgo.getDate() - 1)

    const recentDeliveredOrders = deliveredOrders.filter((order) => {
      const deliveryDate = new Date(order.deliveryDate)
      return deliveryDate >= oneDayAgo && order.fulfillmentCenter?.id // За последние сутки
    })

    const realSuppliesReceived = recentDeliveredOrders.reduce((sum, order) => sum + order.totalItems, 0)

    // Логирование для отладки (сохраняем из оригинала)
    console.warn('📦 Анализ поставок расходников за сутки:', {
      totalDeliveredOrders: deliveredOrders.length,
      recentDeliveredOrders: recentDeliveredOrders.length,
      recentOrders: recentDeliveredOrders.map((order) => ({
        id: order.id,
        deliveryDate: order.deliveryDate,
        totalItems: order.totalItems,
        status: order.status,
      })),
      realSuppliesReceived,
      oneDayAgo: oneDayAgo.toISOString(),
    })

    return realSuppliesReceived
  }, [supplyOrders])

  // === РАСЧЕТ ПОСТУПЛЕНИЙ ТОВАРОВ ЗА СУТКИ ===
  
  const productsReceivedToday = useMemo(() => {
    // Товары, поступившие за сутки из доставленных заказов
    const deliveredOrders = supplyOrders.filter((o) => o.status === 'DELIVERED')
    const oneDayAgo = new Date()
    oneDayAgo.setDate(oneDayAgo.getDate() - 1)

    const recentDeliveredOrders = deliveredOrders.filter((order) => {
      const deliveryDate = new Date(order.deliveryDate)
      return deliveryDate >= oneDayAgo && order.fulfillmentCenter?.id
    })

    const realProductsReceived = recentDeliveredOrders.reduce((sum, order) => sum + (order.totalItems || 0), 0)

    // Логирование для отладки (сохраняем из оригинала)
    console.warn('📦 Анализ поставок товаров за сутки:', {
      totalDeliveredOrders: deliveredOrders.length,
      recentDeliveredOrders: recentDeliveredOrders.length,
      recentOrders: recentDeliveredOrders.map((order) => ({
        id: order.id,
        deliveryDate: order.deliveryDate,
        totalItems: order.totalItems,
        status: order.status,
      })),
      realProductsReceived,
      oneDayAgo: oneDayAgo.toISOString(),
    })

    return realProductsReceived
  }, [supplyOrders])

  // === ФОРМИРОВАНИЕ СТАТИСТИКИ СКЛАДА ===
  
  const warehouseStats: WarehouseStats = useMemo(() => {
    // Если данные еще загружаются, возвращаем нули
    if (warehouseStatsLoading || !warehouseStatsData?.fulfillmentWarehouseStats) {
      return {
        products: { current: 0, change: 0 },
        goods: { current: 0, change: 0 },
        defects: { current: 0, change: 0 },
        pvzReturns: { current: 0, change: 0 },
        fulfillmentSupplies: { current: 0, change: 0 },
        sellerSupplies: { current: 0, change: 0 },
      }
    }

    // Используем данные из GraphQL резолвера
    const stats = warehouseStatsData.fulfillmentWarehouseStats

    return {
      products: {
        current: stats.products.current,
        change: stats.products.change,
      },
      goods: {
        current: stats.goods.current,
        change: stats.goods.change,
      },
      defects: {
        current: stats.defects.current,
        change: stats.defects.change,
      },
      pvzReturns: {
        current: stats.pvzReturns.current,
        change: stats.pvzReturns.change,
      },
      fulfillmentSupplies: {
        current: stats.fulfillmentSupplies.current,
        change: stats.fulfillmentSupplies.change,
      },
      sellerSupplies: {
        current: stats.sellerSupplies.current,
        change: stats.sellerSupplies.change,
      },
    }
  }, [warehouseStatsData, warehouseStatsLoading])

  // === DEBUG ЛОГИРОВАНИЕ РАСХОДНИКОВ ===
  
  // Логирование статистики расходников для отладки (сохраняем из оригинала)
  console.warn('📊 Статистика расходников селлера:', {
    suppliesReceivedToday,
    suppliesUsedToday: 0, // TODO: Здесь должна быть логика подсчета использованных расходников
    totalSellerSupplies: sellerSupplies.reduce((sum: number, supply: any) => sum + (supply.currentStock || 0), 0),
    netChange: suppliesReceivedToday - 0,
  })

  const isStatsLoading = warehouseStatsLoading

  return {
    warehouseStats,
    suppliesReceivedToday,
    productsReceivedToday,
    isStatsLoading,
  }
}