/***********************************************************************************************************************
	RPSLS - Rock, Paper, Scissors, Lizard, Spock Game

	@file public/assets/js/game.js
	@description Handles all javascript for the game.
	@author      Rick Hays
	@date        11-17-2019
	@license     MIT
	@copyright   Copyright © 2019 - Rick Hays, All Rights Reserved.

	Revisions:
    YYYY-MM-DD  XX  Description
***********************************************************************************************************************/

/**
 * ALL Processes that require the Document to be ready before running.
 */
$(document).ready(function ()
{
	/**
	 * Capture the Enter key when in User Name Form
 	 */
	$("#UserName").keypress(function(e)
	{
		if (e.which == 13)
		{
			e.preventDefault();         // Stops Enter Key Action
			submitUserName();
		}
	});

	/**
	 * hideElements - Hides the game play elements from view.
	 */

	function hideElements()
	{
		$('#textRock, #textPaper, #textScissors, #textLizard, #textSpock, #textComputerHas, #textComputerPick, #textWinLoseTie, #textTryAgain, #btnTryAgain, #btnNoThanks').each(function ()
		{
			$(this).hide();
		});
	}

	/**
	 * TryAgain Button - This is for phone (small) screens, hides game play elements and moves the screen back to the
	 *                   top for user to play again.
	 */
	$("#btnTryAgain").click(function(evt)
	{
		hideElements();
		$('html, body').animate({scrollTop: $(".container").offset().top});
	});

	/**
	 * NoThanks Button - Runs endGame from Controller, this removes session and takes you back to home screen.
	 */
	$("#btnNoThanks").click(function(evt)
	{
		window.location.href = '/endGame';
	});

		// Game Play Buttons..
	$(".gameButton").click(function(evt)
	{
		hideElements();

		// Get Button Selected
		let gameButton = $(this).attr("id");

		// AJAX - Play! Pass Option Selected.
		jQuery.ajax(
	    {
			url: 'play/' + gameButton,
			type: 'get',
		    dataType: "json",
			success: function(data)
			{
				$('#textComputerPick h2').text(data.ComputerPick);

				$("#textWinLoseTie").removeAttr('class');
				switch(data.Result)
				{
					case 'WINNER':
						$("#textWinLoseTie").addClass("text-success");
						break;
					case 'LOSER':
						$("#textWinLoseTie").addClass("text-danger");
						break;
					case 'TIE':
						$("#textWinLoseTie").addClass("text-info");
						break;
					default:
						$("#textWinLoseTie").addClass("text-light");
				}
				$('#textWinLoseTie h2').text(data.Result + ' - ' + data.ResultText);
				$('#textRock, #textPaper, #textScissors, #textLizard, #textSpock, #textComputerHas, #textComputerPick, #textWinLoseTie, #textTryAgain, #btnTryAgain, #btnNoThanks').each(function(fadeInDiv)
				{
					$(this).delay(fadeInDiv * 500).fadeIn(1000);
					$('html, body').animate({scrollTop:$(document).height()}, '100');
				});
				// Scores
				$('#totalWins').html(data.Wins);
				$('#totalLoses').html(data.Loses);
				$('#totalTies').html(data.Ties);
			},
			error: function(e)
			{
				console.log(e.lineNumber + ' - ' + e.script + ': ERROR - ' + e.message);
				console.trace();
			}
		});
	});
});

/**
 * validateUName
 * @description
 *      Simple validation for user name.
 *
 * @param UName - User Name to validate.
 * @returns {boolean} True/False if the name validates to the regex
 *
 */
function validateUName(UName)
{
	var regex = /^([0-9a-zA-Z-_@\.]*)$/;
	return (regex.test(UName)) ? true : false;
}

/**
 * submitUserName
 * @description
 *      Handles the form submission.
 *
 */
function submitUserName()
{
	UName = $("#UserName").val();
	if (UName === '')
	{
		$(".boxerror").html('You must enter a user name to play the game.');
	}
	else if(!validateUName(UName))
	{
		$(".boxerror").html('User Name can only contain characters: (a-z, A-Z, 0-9, - _ @ .) Only. ');
	}
	else
	{
		// AJAX to see if name exists and confirm before
		jQuery.ajax(
	{
			url: 'testUser/' + UName,
			type: 'get',
			async: false,
			success: function(data)
			{
				if (data !== '0')
				{
					let answer = confirm("User Name is already in the Database. \nPress: \nOK - To use this name. \nCANCEL - To pick a new name.");
					if (answer == true)
						window.location.href = 'createUser/'+UName+'/'+data;
				}
				else
					window.location.href = 'createUser/'+UName+'/'+data;
			},
			error: function(e)
			{
				alert('84-game.js: ERROR - ' + e.message);
			}
		});
	}
}
