<?php
include '/home/jjglover/phptosql/GLSusers.php';

#diagnostics
#ini_set('display_errors', 1);
#ini_set('display_startup_errors', 1);
#error_reporting(E_ALL);

#test files
#include '/JJCodeDepot/DBfiles/GLSusers.php';

function user_encrypt($password) {
	$hash = password_hash($password, PASSWORD_DEFAULT);
	return $hash;
}

function search_username($user) {
	$setDBH = createGLSUser();
	
	#Check if user exists
	$sqlPrep = 'SELECT Username FROM baseData WHERE Username = :user LIMIT 1';
	$searchUserInstance = $setDBH->prepare($sqlPrep);
	$searchUserInstance->bindParam(':user', $user, PDO::PARAM_STR);
	$searchUserInstance->execute();
	$countFetched = $searchUserInstance->rowCount();
	return $countFetched;
}

function search_passresetcheck($user) {
	$setDBH = createGLSUser();
	
	#Check if user exists
	$sqlPrep = 'SELECT requestpasschange FROM baseData WHERE Username = :user LIMIT 1';
	$searchUserInstance = $setDBH->prepare($sqlPrep);
	$searchUserInstance->bindParam(':user', $user, PDO::PARAM_STR);
	$searchUserInstance->execute();
	$passchangeData = $searchUserInstance->fetch(PDO::FETCH_ASSOC);
return $passchangeData['requestpasschange'];
}

function add_user($user, $createdhash, $setemail, $startteam) {
	$setDBH = createGLSUser();
	
	$startName = $_POST['name'];

	$sqlPrep = 'INSERT INTO baseData (Username, Password, Email, askingTeams, nametoValidate) VALUES (:user, :pass, :email, :askingTeam, :startname)';
	$addUserInstance = $setDBH->prepare($sqlPrep);
	$addUserInstance->bindParam(':user', $user, PDO::PARAM_STR);
	$addUserInstance->bindParam(':pass', $createdhash, PDO::PARAM_STR);
	$addUserInstance->bindParam(':email', $setemail, PDO::PARAM_STR);
	$addUserInstance->bindParam(':askingTeam', $startteam, PDO::PARAM_STR);
	$addUserInstance->bindParam(':startname', $startName, PDO::PARAM_STR);
	$addUserInstance->execute();
	$countAdded = $addUserInstance->rowCount();
	
return $countAdded;	
}

function fetch_password($user) {
	$setDBH = createGLSUser();
	
	$sqlPrep = 'SELECT Password FROM baseData WHERE Username = :user LIMIT 1';
	$SearchUserInstance = $setDBH->prepare($sqlPrep);
	$SearchUserInstance->bindParam(':user', $user, PDO::PARAM_STR);
	$SearchUserInstance->execute();
	$userpassfetch = $SearchUserInstance->fetch(PDO::FETCH_ASSOC);
	
	$userpassreturn = $userpassfetch['Password'];
	
	return $userpassreturn;
}

function getUserID($setusername) {
	$setDBH = createGLSUser();
	
	$SQLuser = 'SELECT idAccount FROM baseData WHERE Username = :user LIMIT 1';
	$getuserID = $setDBH->prepare($SQLuser);
	$getuserID->bindParam(':user', $setusername, PDO::PARAM_STR);
	$getuserID->execute();
	
	$fetchUser = $getuserID->fetch(PDO::FETCH_ASSOC);
	$idUser = $fetchUser['idAccount'];

return $idUser;
}

function getDisplayName($userid) {
	$setDBH = createGLSUser();
	
	$sqlfetchName = 'SELECT idAccount, nametoValidate FROM baseData WHERE idAccount = :iduser LIMIT 1';
	$getUserDisplay = $setDBH->prepare($sqlfetchName);
	$getUserDisplay->bindParam(':iduser', $userid, PDO::PARAM_INT);
	$getUserDisplay->execute();
	$userDisplay = $getUserDisplay->fetch(PDO::FETCH_ASSOC);
	
return $userDisplay;
}

function setupComplete($userid) {
	$setDBH = createGLSUser();
	
	$confirmAccount = 'SELECT confirmUser FROM baseData WHERE idAccount = :iduser LIMIT 1';
	$accountConfirm = $setDBH->prepare($confirmAccount);
	$accountConfirm->bindParam(':iduser', $userid, PDO::PARAM_STR);
	$accountConfirm->execute();
	
	$fetchUser = $accountConfirm->fetch(PDO::FETCH_ASSOC);
	$accountReady = $fetchUser['confirmUser'];

return $accountReady;
}

function set_requestedpass($user, $pass) {
	$setDBH = createGLSUser();

	$sqlPrep = 'UPDATE baseData SET requestpasschange = 1, requestedpass = :passrequested WHERE Username = :userselected';
	$setResetPass = $setDBH->prepare($sqlPrep);
	$setResetPass->bindParam(':userselected', $user, PDO::PARAM_STR);
	$setResetPass->bindParam(':passrequested', $pass, PDO::PARAM_STR);
	$setResetPass->execute();
	$countUpdated = $setResetPass->rowCount();

return $countUpdated;
}

function create_session($user) {	
	$setDBH = createGLSUser();
	
	$sqlPrep = 'INSERT INTO loggedIn (Username, Password) VALUES (:user, :pass)';
	$addUserInstance = $setDBH->prepare($sqlPrep);
	$addUserInstance->bindParam(':user', $user, PDO::PARAM_STR);
	$addUserInstance->bindParam(':pass', $createdhash, PDO::PARAM_STR);
	$addUserInstance->execute();
}

if (!isset($step)) {$step = $_POST['step'];}

switch($step) {
	case 1: #check session timer
		session_start();
			if (!isset($_SESSION['ActivityLast']) OR (time() - $_SESSION['ActivityLast'] > 18000)) {
				session_unset();     // unset $_SESSION variable for the run-time 
				session_destroy();   // destroy session data in storage
				header("location: index.html");
			} else {
				$_SESSION['ActivityLast'] = time();
			}
			$_SESSION['ActivityLast'] = time(); // update last activity time stamp
	break;	
	case 2: #login procedure
		$entereduser = $_POST['username'];
		$enteredpass = $_POST['password'];
		$fetchedpass = fetch_password($entereduser);
		if (password_verify($enteredpass, $fetchedpass))
		{
			$loginUserID = getUserID($entereduser);
			$userDisplay = getDisplayName($loginUserID);

			$checkAccountSetup = setupComplete($loginUserID);
			if ($checkAccountSetup == 1) {
				session_start();
				
				$_SESSION['ActivityLast'] = time();
				$_SESSION['idUser'] = $userDisplay['idAccount'];
				#echo $_SESSION['idUser'];
				$_SESSION['AuthorName'] = $userDisplay['nametoValidate'];
				echo "Success";
				#header("location: newsedit.php");
			} else {
				echo "NoPerms";
				#header("location: createdLogin.html");	
			}
		} else {
			echo "Bad Username or Password!  Please try again!";
			#header("location: retry.html");
		}
		break;
	case 3: #logout
		session_unset();     // unset $_SESSION variable for the run-time 
		session_destroy();   // destroy session data in storage
		break;
	case 4: #add user procedure
		
		$newuser = $_POST['username'];
		$startpassword = $_POST['password'];
		$startemail = $_POST['email'];
		$startteam = $_POST['team'];
		
		$searchuser = search_username($newuser);
		if ($searchuser == 0) 
			{
				$returnedpassword = user_encrypt($startpassword);
				$createUser = add_user($newuser, $returnedpassword, $startemail, $startteam);
				if ($createUser == 1) {
				    include 'GLSrequestUserCreate.php';
					echo "NoPerms";
					#header("location: createdLogin.html");	
				} else {
					echo 'Something went wrong with the creation process!  Please try again or contact <a href="mailto: glov0044@goallinestats.com">glov0044@goallinestats.com</a> for assistance!';
				}
			}
		else {echo "Username already exists! Please select another!";}
	break;
	case 5: #change password procedure
		$userentered = $_POST['username'];
		$startpassword = $_POST['password'];
		$startemail = $_POST['email'];

		$searchuser = search_username($userentered);
		if ($searchuser == 0) {echo 'No username found!  You can try again or <a href="index.html">create a new account</a>!';}
		else {
			$checkexistingreset = search_passresetcheck($userentered);
			#echo $checkexistingreset;
			if ($checkexistingreset == 1) {
				echo 'A password reset is already started!  Please wait or send an email to <a href="mailto: glov0044@goallinestats.com">glov0044@goallinestats.com</a> to get back to you!';
			} else {
				$encryptpassword = user_encrypt($startpassword);
				$requestpassreset = set_requestedpass($userentered, $encryptpassword);
				if ($requestpassreset == 1) {
					include 'GLSrequestPassReset.php';
					echo 'SuccessPass';
					#header("location: createdPassreset.html");	
				} else {echo 'Something went wrong with the password reset process.  Please try again or contact <a href="mailto: glov0044@goallinestats.com">glov0044@goallinestats.com</a> for assistance!';}
			}
		}
	break;
}
?>