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

const prisma = new PrismaClient()

async function testDuplicationFix() {
  console.log('🧪 Тестируем исправление дублирования Supply записей...')

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

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

    console.log(`🏢 Организация фулфилмента: ${fulfillmentOrg.name}`)

    // Получаем текущие Supply записи ПЕРЕД тестом
    const suppliesBeforeTest = await prisma.supply.findMany({
      where: {
        organizationId: fulfillmentOrg.id,
        type: 'FULFILLMENT_CONSUMABLES',
      },
      select: {
        id: true,
        name: true,
        article: true,
        currentStock: true,
        quantity: true,
        organizationId: true,
      },
      orderBy: { createdAt: 'desc' },
    })

    console.log(`\n📦 Supply записи ПЕРЕД тестом (${suppliesBeforeTest.length}):`)
    suppliesBeforeTest.forEach((supply, index) => {
      console.log(`  ${index + 1}. "${supply.name}" (артикул: ${supply.article})`)
      console.log(`     Остаток: ${supply.currentStock}, Количество: ${supply.quantity}`)
      console.log(`     ID: ${supply.id}`)
      console.log(`     ---`)
    })

    // Найдем пример заказа поставки для тестирования
    const testOrder = await prisma.supplyOrder.findFirst({
      where: {
        fulfillmentCenterId: fulfillmentOrg.id,
        status: 'SHIPPED', // Готов для приема
      },
      include: {
        items: {
          include: {
            product: {
              include: {
                category: true,
              },
            },
          },
        },
        organization: true,
        partner: true,
      },
    })

    if (!testOrder) {
      console.log('⚠️  Не найдены заказы поставки в статусе SHIPPED для тестирования')
      console.log('Создадим тестовый сценарий симуляции логики...')
      
      // Создаем симуляцию логики resolver'а для тестирования
      const mockProduct = {
        id: 'test-product-id',
        name: 'Тестовый расходник',
        article: 'СФ20250814TEST123', // Уникальный артикул
        description: 'Тестовый расходник для проверки дублирования',
        category: { name: 'Тестовые расходники' },
      }

      const mockItem = {
        product: mockProduct,
        quantity: 5,
        price: 100.00,
      }

      console.log(`\n🔍 Тестируем логику поиска существующего Supply по артикулу: ${mockProduct.article}`)
      
      // Ищем существующий Supply по артикулу (как в исправленном resolver'е)
      const existingSupply = await prisma.supply.findFirst({
        where: {
          organizationId: fulfillmentOrg.id,
          article: mockProduct.article, // ИСПРАВЛЕНО: поиск по article вместо name
          type: 'FULFILLMENT_CONSUMABLES',
        },
      })

      if (existingSupply) {
        console.log(`✅ Найден существующий Supply для артикула ${mockProduct.article}:`)
        console.log(`   ID: ${existingSupply.id}`)
        console.log(`   Название: ${existingSupply.name}`)
        console.log(`   Текущий остаток: ${existingSupply.currentStock}`)
        console.log(`   📈 ОБНОВИЛИ БЫ существующий (НЕ создавали дубликат)`)
      } else {
        console.log(`🆕 Supply с артикулом ${mockProduct.article} НЕ найден`)
        console.log(`   📝 СОЗДАЛИ БЫ новый Supply`)
      }

      return
    }

    console.log(`\n🎯 Найден тестовый заказ: ${testOrder.id}`)
    console.log(`   Статус: ${testOrder.status}`)
    console.log(`   Товаров: ${testOrder.items.length}`)

    // Показываем, что логика теперь будет делать для каждого товара
    console.log(`\n🔍 Анализируем каждый товар из заказа:`)
    for (const item of testOrder.items) {
      console.log(`\n📦 Товар: "${item.product.name}"`)
      console.log(`   Артикул: ${item.product.article}`)
      console.log(`   Количество: ${item.quantity}`)

      // Новая логика: ищем по артикулу
      const existingSupply = await prisma.supply.findFirst({
        where: {
          organizationId: fulfillmentOrg.id,
          article: item.product.article, // ИСПРАВЛЕНО: поиск по article вместо name
          type: 'FULFILLMENT_CONSUMABLES',
        },
      })

      if (existingSupply) {
        console.log(`   ✅ НАЙДЕН существующий Supply (НЕ будет дубликата):`)
        console.log(`      ID: ${existingSupply.id}`)
        console.log(`      Текущий остаток: ${existingSupply.currentStock}`)
        console.log(`      📈 Остаток ОБНОВИТСЯ: ${existingSupply.currentStock} + ${item.quantity} = ${existingSupply.currentStock + item.quantity}`)
      } else {
        console.log(`   🆕 НЕ найден существующий Supply`)
        console.log(`      📝 СОЗДАСТСЯ новый Supply`)
      }
    }

    console.log(`\n✅ РЕЗУЛЬТАТ: Логика теперь использует уникальный артикул для поиска`)
    console.log(`   🚫 Дублирования НЕ происходит - каждый артикул уникален`)
    console.log(`   📈 Существующие Supply обновляются по артикулу`)

  } catch (error) {
    console.error('❌ Ошибка при тестировании:', error)
  } finally {
    await prisma.$disconnect()
  }
}

testDuplicationFix()