module.exports = function () {
  const server = require('http').createServer(this.nuxt.renderer.app)
  const io = require('socket.io')(server)

  // overwrite nuxt.listen()
  this.nuxt.listen = (port, host) => new Promise((resolve) => server.listen(port || 3000, host || 'localhost', resolve))
  // close this server on 'close' event
  this.nuxt.plugin('close', () => new Promise((resolve) => server.close(resolve)))

  // Add `socket.io-client` in vendor
  this.addVendor('socket.io-client')
  
  // Add socket.io events
  let messages = []
  io.on('connection', (socket) => {
    socket.on('last-messages', function (fn) {
      fn(messages.slice(-50))
    });
    socket.on('send-message', function (message) {
      messages.push(message)
      socket.broadcast.emit('new-message', message)
    })
  });
}