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

const prisma = new PrismaClient()

async function clearFulfillmentSuppliesData() {
  try {
    console.log('🧹 Начинаем очистку данных склада и поставок фулфилмента...')

    // Находим все организации фулфилмента
    const fulfillmentOrgs = await prisma.organization.findMany({
      where: { type: 'FULFILLMENT' },
      select: { id: true, name: true }
    })

    if (fulfillmentOrgs.length === 0) {
      console.log('❌ Организации фулфилмента не найдены')
      return
    }

    console.log('🏢 Найденные организации фулфилмента:')
    fulfillmentOrgs.forEach(org => console.log(`  - ${org.name} (${org.id})`))

    const fulfillmentOrgIds = fulfillmentOrgs.map(org => org.id)

    // Показываем что будет удалено
    const suppliesCount = await prisma.supply.count({
      where: {
        OR: [
          { organizationId: { in: fulfillmentOrgIds } },
          { type: 'FULFILLMENT_CONSUMABLES' }
        ]
      }
    })

    const supplyOrdersCount = await prisma.supplyOrder.count({
      where: {
        OR: [
          { fulfillmentCenterId: { in: fulfillmentOrgIds } },
          { organizationId: { in: fulfillmentOrgIds } }
        ]
      }
    })

    const supplyOrderItemsCount = await prisma.supplyOrderItem.count({
      where: {
        supplyOrder: {
          OR: [
            { fulfillmentCenterId: { in: fulfillmentOrgIds } },
            { organizationId: { in: fulfillmentOrgIds } }
          ]
        }
      }
    })

    console.log('\n📊 Данные для удаления:')
    console.log(`  - Расходники (Supply): ${suppliesCount}`)
    console.log(`  - Заказы поставок (SupplyOrder): ${supplyOrdersCount}`)
    console.log(`  - Элементы заказов (SupplyOrderItem): ${supplyOrderItemsCount}`)

    if (suppliesCount === 0 && supplyOrdersCount === 0) {
      console.log('✅ Нет данных для удаления')
      return
    }

    // Подтверждение
    const readline = require('readline').createInterface({
      input: process.stdin,
      output: process.stdout
    })

    const answer = await new Promise(resolve => {
      readline.question('\n⚠️  Вы уверены что хотите удалить эти данные? (да/нет): ', resolve)
    })
    readline.close()

    if (answer.toLowerCase() !== 'да' && answer.toLowerCase() !== 'yes') {
      console.log('❌ Операция отменена')
      return
    }

    console.log('\n🗑️  Начинаем удаление...')

    // Удаляем в правильном порядке (с учетом foreign keys)

    // 1. Удаляем элементы заказов поставок
    const deletedItems = await prisma.supplyOrderItem.deleteMany({
      where: {
        supplyOrder: {
          OR: [
            { fulfillmentCenterId: { in: fulfillmentOrgIds } },
            { organizationId: { in: fulfillmentOrgIds } }
          ]
        }
      }
    })
    console.log(`✅ Удалено элементов заказов: ${deletedItems.count}`)

    // 2. Удаляем заказы поставок
    const deletedOrders = await prisma.supplyOrder.deleteMany({
      where: {
        OR: [
          { fulfillmentCenterId: { in: fulfillmentOrgIds } },
          { organizationId: { in: fulfillmentOrgIds } }
        ]
      }
    })
    console.log(`✅ Удалено заказов поставок: ${deletedOrders.count}`)

    // 3. Удаляем расходники
    const deletedSupplies = await prisma.supply.deleteMany({
      where: {
        OR: [
          { organizationId: { in: fulfillmentOrgIds } },
          { type: 'FULFILLMENT_CONSUMABLES' }
        ]
      }
    })
    console.log(`✅ Удалено расходников: ${deletedSupplies.count}`)

    console.log('\n🎉 Очистка данных склада и поставок фулфилмента завершена!')
    console.log('📝 Примечание: Сами организации фулфилмента и другие данные (сотрудники, услуги) НЕ удалены')

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

// Запуск скрипта
clearFulfillmentSuppliesData()