import { games, log } from '../main';
import { Server, Socket } from 'socket.io';

export default (io: Server, socket: Socket, data: NewHand) => {
	try {

		// Assert game exists
		if (!games[data.game_code]) {
			log.debug(`Can't find game with code: ${data.game_code}`);
			socket.emit(`UpdateHand`, {
				status: 404,
				message: `Game with code ${data.game_code} could not be found`,
				source: `NewHand`
			});
			return;
		};
		let game = games[data.game_code];
		let team = game.teams[data.team - 1];
		let deck = game.questions;

		/**
		 * The amount of cards that the team has in their hand prior to
		 * discarding all of their hand, this is used to make sure that they
		 * get back the same number of cards that they had in their hand.
		 */
		let handSize = team.hand.length;

		// Empty the medium's hand to the discard pile so we know where the
		// cards are.
		for (var card of team.hand) {
			deck.discard(card);
			team.removeCard(card);
			game.log.silly(`Removing card: '${card}' from team ${data.team}'s hand.`);
		};

		// Add the questions and then alert the game clients about the changes
		team.addCardsToHand(deck.draw(handSize));
		game.log.silly(`Drew a new hand of cards for team ${data.team}.`);
		io.to(`${game.id}:${team.id}:guesser`).emit(`UpdateHand`, {
			status: 200,
			mode: `replace`,
			questions: team.hand,
		});
	}
	catch (err) {
		log.prettyError(err);
		socket.emit(`UpdateHand`, {
			status: 500,
			message: `${err.name}: ${err.message}`,
			source: `NewHand`,
		});
	}
};