const { PrismaClient } = require('@prisma/client')

const prisma = new PrismaClient()

async function analyzeFulfillmentSupplies() {
  try {
    console.log('🔍 ГЛУБОКИЙ АНАЛИЗ РАСХОДНИКОВ ФУЛФИЛМЕНТА')
    console.log('=' .repeat(60))
    
    // Находим фулфилмент организацию пользователя с номером +7 (999) 999-99-99
    const fulfillmentUser = await prisma.user.findFirst({
      where: { phone: '79999999999' },
      include: { 
        organization: {
          include: {
            _count: {
              select: {
                supplies: true,
                supplyOrders: true,
                fulfillmentSupplyOrders: true
              }
            }
          }
        }
      }
    })

    if (!fulfillmentUser?.organization) {
      console.log('❌ Фулфилмент пользователь или организация не найдены')
      return
    }

    const org = fulfillmentUser.organization
    console.log('🏢 ОРГАНИЗАЦИЯ:')
    console.log(`   ID: ${org.id}`)
    console.log(`   Название: ${org.name}`)
    console.log(`   Тип: ${org.type}`)
    console.log(`   Расходников на складе: ${org._count.supplies}`)
    console.log(`   Заказов поставок: ${org._count.supplyOrders}`)
    console.log(`   Входящих поставок: ${org._count.fulfillmentSupplyOrders}`)
    console.log('')

    // 1. АНАЛИЗ РАСХОДНИКОВ НА СКЛАДЕ
    console.log('📦 1. РАСХОДНИКИ НА СКЛАДЕ:')
    
    const allSupplies = await prisma.supply.findMany({
      where: { organizationId: org.id },
      orderBy: { createdAt: 'desc' }
    })

    console.log(`   Всего записей Supply: ${allSupplies.length}`)
    
    // Группируем по типам
    const fulfillmentSupplies = allSupplies.filter(s => s.type === 'FULFILLMENT_CONSUMABLES')
    const sellerSupplies = allSupplies.filter(s => s.type === 'SELLER_CONSUMABLES')
    
    console.log(`   📊 Расходники фулфилмента: ${fulfillmentSupplies.length} записей`)
    console.log(`   💼 Расходники селлеров: ${sellerSupplies.length} записей`)
    console.log('')
    
    // Детальный анализ расходников фулфилмента
    if (fulfillmentSupplies.length > 0) {
      console.log('🔍 ДЕТАЛИ РАСХОДНИКОВ ФУЛФИЛМЕНТА:')
      fulfillmentSupplies.forEach((supply, index) => {
        console.log(`   ${index + 1}. "${supply.name}" (${supply.article})`)
        console.log(`      ID: ${supply.id}`)
        console.log(`      Количество: ${supply.quantity} шт`)
        console.log(`      Текущий остаток: ${supply.currentStock} шт`)
        console.log(`      Использовано: ${supply.usedStock} шт`)
        console.log(`      Статус: ${supply.status}`)
        console.log(`      Поставщик: ${supply.supplier}`)
        console.log(`      Дата: ${supply.date?.toISOString().split('T')[0]}`)
        console.log(`      Создано: ${supply.createdAt?.toISOString().split('T')[0]}`)
        console.log('')
      })
    }

    // 2. АНАЛИЗ ЗАКАЗОВ ПОСТАВОК
    console.log('📋 2. ЗАКАЗЫ ПОСТАВОК (созданные фулфилментом):')
    
    const createdOrders = await prisma.supplyOrder.findMany({
      where: { organizationId: org.id },
      include: {
        partner: { select: { name: true, type: true } },
        items: {
          include: { product: { select: { name: true, article: true } } }
        }
      },
      orderBy: { createdAt: 'desc' }
    })

    console.log(`   Всего заказов: ${createdOrders.length}`)
    
    createdOrders.forEach((order, index) => {
      console.log(`   ${index + 1}. Заказ ${order.id}`)
      console.log(`      Поставщик: ${order.partner.name} (${order.partner.type})`)
      console.log(`      Статус: ${order.status}`)
      console.log(`      Тип расходников: ${order.consumableType}`)
      console.log(`      Дата доставки: ${order.deliveryDate?.toISOString().split('T')[0]}`)
      console.log(`      Сумма: ${order.totalAmount} ₽`)
      console.log(`      Товаров: ${order.items.length}`)
      order.items.forEach((item, itemIndex) => {
        console.log(`         ${itemIndex + 1}) ${item.product.name} (${item.product.article}) - ${item.quantity} шт`)
      })
      console.log('')
    })

    // 3. АНАЛИЗ ВХОДЯЩИХ ПОСТАВОК
    console.log('📥 3. ВХОДЯЩИЕ ПОСТАВКИ (доставляемые на фулфилмент):')
    
    const receivedOrders = await prisma.supplyOrder.findMany({
      where: { fulfillmentCenterId: org.id },
      include: {
        organization: { select: { name: true, type: true } },
        partner: { select: { name: true, type: true } },
        items: {
          include: { product: { select: { name: true, article: true } } }
        }
      },
      orderBy: { createdAt: 'desc' }
    })

    console.log(`   Всего входящих поставок: ${receivedOrders.length}`)
    
    receivedOrders.forEach((order, index) => {
      console.log(`   ${index + 1}. Поставка ${order.id}`)
      console.log(`      Заказчик: ${order.organization.name} (${order.organization.type})`)
      console.log(`      Поставщик: ${order.partner.name} (${order.partner.type})`)
      console.log(`      Статус: ${order.status}`)
      console.log(`      Тип расходников: ${order.consumableType}`)
      console.log(`      Дата доставки: ${order.deliveryDate?.toISOString().split('T')[0]}`)
      console.log(`      Сумма: ${order.totalAmount} ₽`)
      console.log(`      Товаров: ${order.items.length}`)
      order.items.forEach((item, itemIndex) => {
        console.log(`         ${itemIndex + 1}) ${item.product.name} (${item.product.article}) - ${item.quantity} шт`)
      })
      console.log('')
    })

    // 4. СВЕРКА ДАННЫХ
    console.log('⚖️  4. СВЕРКА ДАННЫХ:')
    
    // Подсчитываем ожидаемое количество расходников из заказов
    const totalFromOrders = createdOrders
      .filter(order => order.status === 'DELIVERED' && order.consumableType === 'FULFILLMENT_CONSUMABLES')
      .reduce((sum, order) => {
        return sum + order.items.reduce((itemSum, item) => itemSum + item.quantity, 0)
      }, 0)

    const totalFromSupplies = fulfillmentSupplies.reduce((sum, supply) => sum + supply.currentStock, 0)
    
    console.log(`   📊 Ожидаемое из доставленных заказов: ${totalFromOrders} шт`)
    console.log(`   📦 Фактическое в Supply записях: ${totalFromSupplies} шт`)
    console.log(`   ${totalFromOrders === totalFromSupplies ? '✅' : '❌'} Соответствие: ${totalFromOrders === totalFromSupplies ? 'КОРРЕКТНО' : 'ОШИБКА'}`)
    
    if (totalFromOrders !== totalFromSupplies) {
      console.log(`   🔍 Разница: ${Math.abs(totalFromOrders - totalFromSupplies)} шт`)
    }

    // 5. АНАЛИЗ ПО АРТИКУЛАМ
    console.log('')
    console.log('🏷️  5. АНАЛИЗ ПО АРТИКУЛАМ:')
    
    const articleGroups = {}
    fulfillmentSupplies.forEach(supply => {
      if (!articleGroups[supply.article]) {
        articleGroups[supply.article] = []
      }
      articleGroups[supply.article].push(supply)
    })

    console.log(`   Уникальных артикулов: ${Object.keys(articleGroups).length}`)
    
    Object.entries(articleGroups).forEach(([article, supplies]) => {
      const totalStock = supplies.reduce((sum, s) => sum + s.currentStock, 0)
      console.log(`   📋 ${article}: ${supplies.length} записей, ${totalStock} шт общий остаток`)
      if (supplies.length > 1) {
        console.log(`      ⚠️  ДУБЛИРОВАНИЕ: ${supplies.length} записей для одного артикула!`)
        supplies.forEach((supply, index) => {
          console.log(`         ${index + 1}) ID: ${supply.id}, остаток: ${supply.currentStock} шт`)
        })
      }
    })

    console.log('')
    console.log('=' .repeat(60))
    console.log('✅ АНАЛИЗ ЗАВЕРШЕН')

  } catch (error) {
    console.error('❌ ОШИБКА при анализе:', error)
    console.error('   Детали:', error.message)
  } finally {
    await prisma.$disconnect()
  }
}

analyzeFulfillmentSupplies()