'use strict';

const config = require('./config/config.js');
const UserManager = require('./user/user-manager');
const Server = require('./server');
const Logger = require('./logger');
const SocketManager = require('./socket-manager');

let parser = new(require('./parser'))();
let logger = new Logger();
let userManager = new UserManager();
let socketManager = new SocketManager();
let server = new Server(config, parser, socketManager);

server.run();

logger.info('Game server is set up!');

///////////
// Un socket se conecta.
// Es una nueva pestaña en un navegador. Ese socket tiene una id, una Ip y, quizá, un jwt.
// De ser autentificado, se conecta al usuario. Un User puede tener una lista de sockets.
// Si no, se crea una instancia de User nuevo, listado en una lista de usuarios, que lleva dentro ese socket.
// -- Falta añadir caso de reconexión --
// Si un usuario envía una acción a través de su socket, se lanza el evento con su user y la petición.
// ¿El manager correspondiente maneja la acción?

//////////////
// Bacteria - Representa una bacteria con sus reglas.
// Board - Una matriz de dos dimensiones que representa las posiciones en una partida.
// Game - Representa una partida, que contiene los jugadores y los turnos.
// Cada turno se calcula para todas las celdas el estado siguiente.
// Una vez calculado el estado, se actualiza y se envía a todos los jugadores.
// 