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

const prisma = new PrismaClient()

async function clearFulfillmentData() {
  console.log('🧹 Очищаем данные склада и входящих поставок для кабинета фулфилмента...')

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

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

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

    // 1. Получаем статистику ПЕРЕД очисткой
    console.log('\n📊 СТАТИСТИКА ПЕРЕД ОЧИСТКОЙ:')
    
    const suppliesCount = await prisma.supply.count({
      where: {
        organizationId: fulfillmentOrg.id,
        type: 'FULFILLMENT_CONSUMABLES'
      }
    })

    const supplyOrdersCount = await prisma.supplyOrder.count({
      where: {
        fulfillmentCenterId: fulfillmentOrg.id
      }
    })

    const supplyOrderItemsCount = await prisma.supplyOrderItem.count({
      where: {
        supplyOrder: {
          fulfillmentCenterId: fulfillmentOrg.id
        }
      }
    })

    console.log(`  📦 Расходники фулфилмента (Supply): ${suppliesCount}`)
    console.log(`  📋 Входящие поставки (SupplyOrder): ${supplyOrdersCount}`)
    console.log(`  📝 Элементы поставок (SupplyOrderItem): ${supplyOrderItemsCount}`)

    if (suppliesCount === 0 && supplyOrdersCount === 0) {
      console.log('✅ Данные уже очищены - ничего не найдено для удаления')
      return
    }

    // 2. ОЧИСТКА ДАННЫХ

    console.log('\n🗑️  НАЧИНАЕМ ОЧИСТКУ...')

    // 2.1 Удаляем элементы заказов поставок (связанные записи)
    if (supplyOrderItemsCount > 0) {
      console.log('🗑️  Удаляем элементы заказов поставок...')
      const deletedItems = await prisma.supplyOrderItem.deleteMany({
        where: {
          supplyOrder: {
            fulfillmentCenterId: fulfillmentOrg.id
          }
        }
      })
      console.log(`✅ Удалено элементов заказов поставок: ${deletedItems.count}`)
    }

    // 2.2 Удаляем заказы поставок
    if (supplyOrdersCount > 0) {
      console.log('🗑️  Удаляем заказы поставок...')
      const deletedOrders = await prisma.supplyOrder.deleteMany({
        where: {
          fulfillmentCenterId: fulfillmentOrg.id
        }
      })
      console.log(`✅ Удалено заказов поставок: ${deletedOrders.count}`)
    }

    // 2.3 Удаляем расходники фулфилмента
    if (suppliesCount > 0) {
      console.log('🗑️  Удаляем расходники фулфилмента...')
      const deletedSupplies = await prisma.supply.deleteMany({
        where: {
          organizationId: fulfillmentOrg.id,
          type: 'FULFILLMENT_CONSUMABLES'
        }
      })
      console.log(`✅ Удалено расходников фулфилмента: ${deletedSupplies.count}`)
    }

    // 3. Проверяем результат
    console.log('\n📊 СТАТИСТИКА ПОСЛЕ ОЧИСТКИ:')
    
    const finalSuppliesCount = await prisma.supply.count({
      where: {
        organizationId: fulfillmentOrg.id,
        type: 'FULFILLMENT_CONSUMABLES'
      }
    })

    const finalOrdersCount = await prisma.supplyOrder.count({
      where: {
        fulfillmentCenterId: fulfillmentOrg.id
      }
    })

    const finalItemsCount = await prisma.supplyOrderItem.count({
      where: {
        supplyOrder: {
          fulfillmentCenterId: fulfillmentOrg.id
        }
      }
    })

    console.log(`  📦 Расходники фулфилмента (Supply): ${finalSuppliesCount}`)
    console.log(`  📋 Входящие поставки (SupplyOrder): ${finalOrdersCount}`)
    console.log(`  📝 Элементы поставок (SupplyOrderItem): ${finalItemsCount}`)

    if (finalSuppliesCount === 0 && finalOrdersCount === 0 && finalItemsCount === 0) {
      console.log('\n✅ ОЧИСТКА ЗАВЕРШЕНА УСПЕШНО!')
      console.log('   🧹 Все данные склада и входящих поставок удалены')
      console.log('   📊 Статистика на дашборде будет показывать 0')
    } else {
      console.log('\n⚠️  ВНИМАНИЕ: Не все данные были удалены')
      console.log('   Возможно, есть связанные записи, которые нужно удалить отдельно')
    }

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

clearFulfillmentData()