const path = require("path");
const { addMessage } = require(path.join(__dirname + "/redis.js"));

const validateUsername = (username) => {
  let error = undefined;
  const illegalChars = /\W/;
  const minLength = 3;
  const maxLength = 15;

  if (typeof username !== 'string') {
    error = 'Ugyldig brukernavn.';
  } else if (username.length === 0) {
    error = 'Vennligst oppgi brukernavn.';
  } else if (username.length < minLength || username.length > maxLength) {
    error = `Brukernavn må være mellom ${minLength}-${maxLength} karaktere.`
  } else if (illegalChars.test(username)) {
    error = 'Brukernavn kan bare inneholde tall og bokstaver.'
  }

  return error;
}

const io = (io) => {
  io.on("connection", socket => {
    let username = null;

    socket.on("username", msg => {
      const usernameValidationError = validateUsername(msg.username);
      if (usernameValidationError) {
        username = null;
        socket.emit("accept_username", {
          reason: usernameValidationError,
          success: false,
          username: undefined
        });
      } else {
        username = msg.username;
        socket.emit("accept_username", {
          reason: undefined,
          success: true,
          username: msg.username
        });
      }
    });

    socket.on("chat", msg => {
      msg.username = username;
      msg.timestamp = new Date().getTime();
      addMessage(msg);
      io.emit("chat", msg);
    });
  });
};

module.exports = io;
