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

const prisma = new PrismaClient()

async function testRealSupplyOrderAccept() {
  console.log('🎯 ТЕСТИРУЕМ РЕАЛЬНЫЙ ПРИЕМ ЗАКАЗА ПОСТАВКИ...')

  try {
    // Найдем организацию фулфилмента
    const fulfillmentOrg = await prisma.organization.findFirst({
      where: { type: 'FULFILLMENT' },
      select: { id: true, name: true }
    })

    if (!fulfillmentOrg) {
      console.log('❌ Организация фулфилмента не найдена')
      return
    }

    // Найдем заказ поставки в статусе DELIVERED (который мы приняли)
    let existingOrder = await prisma.supplyOrder.findFirst({
      where: {
        fulfillmentCenterId: fulfillmentOrg.id,
        status: 'DELIVERED',
      },
      include: {
        items: {
          include: {
            product: true,
          },
        },
      },
    })

    if (!existingOrder) {
      console.log('⚠️  Не найден заказ в статусе DELIVERED, ищем SHIPPED...')
      existingOrder = await prisma.supplyOrder.findFirst({
        where: {
          fulfillmentCenterId: fulfillmentOrg.id,
          status: 'SHIPPED',
        },
        include: {
          items: {
            include: {
              product: true,
            },
          },
        },
      })

      if (!existingOrder) {
        console.log('❌ Не найден заказ для тестирования')
        return
      }

      console.log(`📋 Найден заказ в статусе SHIPPED: ${existingOrder.id}`)
      console.log('   Сначала "примем" его программно...')

      // Принимаем заказ через резолвер-код
      await prisma.supplyOrder.update({
        where: { id: existingOrder.id },
        data: { status: 'DELIVERED' }
      })
    }

    console.log(`\n📋 ЗАКАЗ ДЛЯ ТЕСТИРОВАНИЯ: ${existingOrder.id}`)
    console.log(`   Статус: DELIVERED (принят)`)
    console.log(`   Элементов: ${existingOrder.items.length}`)
    
    existingOrder.items.forEach((item, index) => {
      console.log(`   ${index + 1}. Товар: ${item.product.name}`)
      console.log(`      Артикул: ${item.product.article}`)
      console.log(`      Количество: ${item.quantity}`)
    })

    console.log('\n📊 ПРОВЕРЯЕМ РЕЗУЛЬТАТЫ В БАЗЕ ДАННЫХ:')

    // 1. Проверяем Supply записи
    const supplies = await prisma.supply.findMany({
      where: {
        organizationId: fulfillmentOrg.id,
        type: 'FULFILLMENT_CONSUMABLES',
      },
      select: {
        id: true,
        name: true,
        article: true,
        currentStock: true,
        quantity: true,
        status: true,
        createdAt: true,
      },
      orderBy: { updatedAt: 'desc' },
    })

    console.log(`\n📦 SUPPLY ЗАПИСИ В БАЗЕ (${supplies.length}):`)
    supplies.forEach((supply, index) => {
      console.log(`  ${index + 1}. "${supply.name}" (артикул: ${supply.article})`)
      console.log(`     Остаток: ${supply.currentStock}, Всего: ${supply.quantity}`)
      console.log(`     Статус: ${supply.status}, ID: ${supply.id}`)
      console.log(`     Создан: ${supply.createdAt}`)
      console.log(`     ---`)
    })

    // 2. Проверяем статистику как в dashboard
    console.log('\n📊 СТАТИСТИКА ДЛЯ DASHBOARD:')
    const totalCurrent = supplies.reduce((sum, supply) => sum + supply.currentStock, 0)
    const totalQuantity = supplies.reduce((sum, supply) => sum + supply.quantity, 0)
    
    console.log(`   📈 Общий текущий остаток: ${totalCurrent}`)
    console.log(`   📊 Общее количество: ${totalQuantity}`)
    console.log(`   🏷️  Всего позиций: ${supplies.length}`)

    // 3. Проверяем, что GraphQL query возвращает данные
    console.log('\n🔍 ТЕСТИРУЕМ GraphQL QUERY myFulfillmentSupplies:')
    
    // Симулируем вызов резолвера
    const graphqlResult = supplies.map(supply => ({
      id: supply.id,
      name: supply.name,
      article: supply.article, // ВАЖНО: есть ли это поле?
      currentStock: supply.currentStock,
      quantity: supply.quantity,
      status: supply.status
    }))

    console.log('   ✅ GraphQL результат:')
    graphqlResult.forEach((item, index) => {
      console.log(`     ${index + 1}. ${item.name} (${item.article})`)
      console.log(`        Остаток: ${item.currentStock}`)
    })

    console.log('\n✅ ТЕСТ ЗАВЕРШЕН!')
    console.log('\n🎯 ВЫВОДЫ:')
    console.log(`   📦 Supply записи создаются: ${supplies.length > 0 ? 'ДА' : 'НЕТ'}`)
    console.log(`   🏷️  Артикулы заполнены: ${supplies.every(s => s.article) ? 'ДА' : 'НЕТ'}`)
    console.log(`   📊 Остатки корректные: ${totalCurrent > 0 ? 'ДА' : 'НЕТ'}`)
    console.log(`   🔍 GraphQL вернет данные: ${graphqlResult.length > 0 ? 'ДА' : 'НЕТ'}`)

    if (supplies.length === 0) {
      console.log('\n❌ ПРОБЛЕМА: Нет Supply записей после приема заказа!')
      console.log('   Возможные причины:')
      console.log('   1. Резолвер fulfillmentReceiveOrder не создает Supply записи')
      console.log('   2. Неправильная логика поиска существующих записей')
      console.log('   3. Ошибка в условиях создания')
    } else if (supplies.some(s => !s.article)) {
      console.log('\n⚠️  ПРОБЛЕМА: Не все Supply записи имеют артикулы!')
    } else {
      console.log('\n✅ ВСЕ В ПОРЯДКЕ: Supply записи созданы с артикулами!')
    }

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

testRealSupplyOrderAccept()