const nmp = require('minecraft-protocol')
const { startServer } = require('./downloadMcpcServer')
const debug = require('debug')('prismarine-registry')

async function collectPackets (version, names = ['login'], cb) {
  const collected = []
  const server = await startServer(version, 25569)
  console.log('Started server')

  const client = nmp.createClient({
    version,
    host: 'localhost',
    port: 25569,
    username: 'test'
  })

  let clientConnected = false

  client.on('connect', () => {
    console.log('[client] Client connected')
    clientConnected = true
  })

  for (const name of names) {
    client.on(name, (packet) => {
      cb(name, packet)
      collected.push(packet)
    })
  }

  client.on('packet', (data, { name }) => debug('[client] -> ', name))

  setTimeout(() => {
    console.log('Stopping server')
    server.stop()
    client.end()
    if (!clientConnected) {
      throw new Error('Client never connected')
    }
  }, 9000)
}

module.exports = collectPackets
