const { literal, argument, integer, string, greedyString } = require('brigadier-commands')
const nbt = require('prismarine-nbt')
const snbt = require('../util/snbt.js')

module.exports = {
  register (dispatcher) {
    const node = dispatcher.register(
      literal('spawnmob')
        .then(
          argument('amount', integer())
            .then(
              argument('entity', string())
                .executes(c => this.spawnMobCommand(c))
            )
        )
    )

    node.description = 'Summons multiple entities of a specific type'
    node.permissionLevel = 0
  },

  spawnMobCommand (context) {
    const source = context.source
    const bot = source.bot
    const player = source.getPlayerOrThrow()

    const amount = context.getArgument('amount')
    const entity = context.getArgument('entity')

    const data = snbt.stringify(nbt.comp({ id: nbt.string(entity) }))
    const passengers = Array(amount).fill(data)
    bot.core.run(`execute at ${player.uuid} run setblock ~ ~-1 ~ command_block${snbt.stringify(nbt.comp({ auto: nbt.byte(1), Command: nbt.string(`summon area_effect_cloud ~ ~1 ~ {Passengers:[${passengers.join(',')}]}`) }))} destroy`)
  }
}