'use strict';

const onlineUsers = {};
module.exports = () => {
  return async (ctx, next) => {
    const { socket, app } = ctx;
    const { io } = app;
    const nsp = io.of('/');

    onlineUsers[socket.handshake.query.id] = {
      userId: socket.handshake.query.id,
    };
    setTimeout(() => {
      nsp.emit('onlineUsers', Object.keys(onlineUsers));
    }, 1000);

    socket.on('disconnect', () => {
      delete onlineUsers[socket.handshake.query.id];
      nsp.emit('onlineUsers', Object.keys(onlineUsers));
    });

    await next();
  };
};