<?php

include_once(SUITEINCLUDEDIR . "class/class.sql.php");

$ENV__GLOBAL__VAR = parse_ini_file(__DIR__ . "/../../.env_ini", true)["ga_btn"];


/**
 * @function for handle GA functionality
 *  @created by akhan for SO-412
 */
function handle_ga($user_id)
{
	$redirect_type= isset($_REQUEST['redirect_type']) ? 'manual':'auto';
	if($redirect_type == 'manual'){
		$check_ga_permission = checkGAPermission($user_id);
	}else{
		$check_ga_permission = checkGARedirectPermission($user_id);
	}
	if ($check_ga_permission['status'] == true) {
		$check_ga_primary_account = checkUserPrimaryAccount($user_id);
		if ($check_ga_primary_account['status'] == true) {
			$user_data = $check_ga_primary_account['user_data'];
			$check_ga_response = getGAResponse($user_data->cEmail, $user_data->cPassword, $user_id);
			return $check_ga_response;
		} else {
			return $check_ga_primary_account;
		}
	} else {
		return $check_ga_permission;
	}
}

/**
 * @function for check GA redirect permission
 * @param user_id - current/login user id
 * @created by akhan for SO-412
 */
function checkGARedirectPermission($iUserID)
{
	$response = array();
	$auto_redirection_key_name = 'Auto Redirection Applicable';
	$query = "SELECT iSectionID from gen_Section where cName='" . $auto_redirection_key_name . "' AND iStatus='0'";
	$dbHost = new SQL();
	$dbHost->query($query);
	$iNumRows = $dbHost->getNumRows();
	$genSectionData = $dbHost->getRow();
	if ($iNumRows > 0) {
		$iSectionID = $genSectionData->iSectionID;
		$query2 = "select iUserpermissionID from gen_Userpermission WHERE iSectionID='" . $iSectionID . "' AND iUserID='" . $iUserID . "' AND iStatus='0';";
		$dbHost2 = new SQL();
		$dbHost2->query($query2);
		$iNumRows2 = $dbHost2->getNumRows();
		// $genUserPerData = $dbHost2->getRow();
		if ($iNumRows2 > 0) {
			$response = ['status' => true, 'message' => 'GA Auto Redirect Permission Exist'];
		} else {
			$response = ['status' => false, 'message' => 'GA Auto Redirect Permission Not Exist'];
		}
	} else {
		$response = ['status' => false, 'message' => 'GA Auto Redirect Section Not Exist'];
	}
	return $response;
}

function checkGAPermission($iUserID)
{
	$response = array();
	$key_name = 'GlobeAssist';
	$query = "SELECT iSectionID from gen_Section where cName='" . $key_name . "' AND iStatus='0'";
	$dbHost = new SQL();
	$dbHost->query($query);
	$iNumRows = $dbHost->getNumRows();
	$genSectionData = $dbHost->getRow();
	if ($iNumRows > 0) {
		$iSectionID = $genSectionData->iSectionID;
		$query2 = "select iUserpermissionID from gen_Userpermission WHERE iSectionID='" . $iSectionID . "' AND iUserID='" . $iUserID . "' AND iStatus='0';";
		$dbHost2 = new SQL();
		$dbHost2->query($query2);
		$iNumRows2 = $dbHost2->getNumRows();
		// $genUserPerData = $dbHost2->getRow();
		if ($iNumRows2 > 0) {
			$response = ['status' => true, 'message' => 'GA User Permission Exist'];
		} else {
			$response = ['status' => false, 'message' => 'GA User Permission Not Exist'];
		}
	} else {
		$response = ['status' => false, 'message' => 'GA Section Not Exist'];
	}
	return $response;
}

/**
 * @function for check Primary Account
 * @param user_id - current/login user id
 * @created by akhan for SO-412
 */
function checkUserPrimaryAccount($iUserID)
{
	$currentDate = date("Y-m-d");
	$response = array();
	$query = "SELECT cEmail from gen_User where iUserID='" . $iUserID . "'";
	$dbHost = new SQL();
	$dbHost->query($query);
	$iNumRows = $dbHost->getNumRows();
	$userData = $dbHost->getRow();
	if ($iNumRows > 0) {
		$cEmail = $userData->cEmail;
		$query2 = "SELECT cActiveaccount, tAccountexpiration,cUsername,cPassword,cEmail from gen_User where cEmail='" . $cEmail . "' and is_primary_account=1";
		$dbHost2 = new SQL();
		$dbHost2->query($query2);
		$iNumRows2 = $dbHost2->getNumRows();
		$userPrimaryAccount = $dbHost2->getRow();
		if ($iNumRows2 > 0) {
			if ($userPrimaryAccount->cActiveaccount != 'Y') {
				$response = ['status' => false, 'message' => 'Primary account is not active.'];
			} elseif ($userPrimaryAccount->tAccountexpiration < $currentDate) {
				$response = ['status' => false, 'message' => 'Primary account has expired.'];
			} else {
				// ga logic start
				$response = ['status' => true, 'message' => 'Primary account has exist and active.', 'user_data' => $userPrimaryAccount];
			}
		} else {
			$response = ['status' => false, 'message' => 'No primary account exist in our record.'];
		}
	} else {
		$response = ['status' => false, 'message' => 'user record not found'];
	}
	return $response;
}


function getGAResponse($email, $password, $user_id)
{
	global $ENV__GLOBAL__VAR;
	$response = array();
	$retrieve_temp_token_url = $ENV__GLOBAL__VAR['retrieve_temp_token_url'];
	$bearer_token = ga_retrieve_token();
	$post_data = [
		'cUserName' => $email,
		'cPassword' => $password,
		'cDeviceUUID' => 'SSCPortal',
		'iApplicationID' => '3',
		'UserEmailAddress' => $email,
		'UserIdentifier' => $user_id
	];
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $retrieve_temp_token_url);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		'Content-Type: application/json',
		'Authorization: Bearer ' . $bearer_token
	));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$response = json_decode(curl_exec($ch));
	curl_close($ch);
	$responseObject = $response->responseObject ?? null;
	$show_error_message = $response->displayCode->messageString ?? 'Your profile for GlobeAssist is not completed. Please contact support';
	if ($responseObject != null) {
		$temp_token = $responseObject->cSecurityID;
		header("Location: ".$ENV__GLOBAL__VAR['auth_token_login_url'].$temp_token);
		exit();
	} else {
		$response = ['status' => false, 'message' => $show_error_message];
	}
	return $response;
}
/**
 * @function for get/retrieve token from GA
 * @param user_id - current/login user id
 * @created by akhan for SO-412
 */
function ga_retrieve_token()
{
	global $ENV__GLOBAL__VAR;
	$post_data = [
		'cUserName' => $ENV__GLOBAL__VAR['retrieve_token_user'],
		'cPassword' => $ENV__GLOBAL__VAR['retrieve_token_password'],
		'cDeviceUUID' => "SSCPortal"
	];
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $ENV__GLOBAL__VAR["retrieve_token_url"]);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		'Content-Type: application/json'
	));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$bearer_token = curl_exec($ch);
	$bearer_token = json_decode($bearer_token)->responseObject->cAccessToken;
	curl_close($ch);
	return $bearer_token;
}

//created GASyncProfile function by akhan for SO-430
function GASyncProfile($iUserID)
{
	
	global $ENV__GLOBAL__VAR;

	$checkGAUSER = checkGAUser($iUserID);
	if($checkGAUSER['status'] == true){
		$bearer_token = ga_retrieve_token();
		$post_data = [
			'iUserID' => $iUserID,
			'CallIdentifier' => 'batch_run/batch_sync_ssc_user'
		];
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $ENV__GLOBAL__VAR["usermaintenance_ssc_sync_url"]);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
			'Content-Type: application/json',
			'Authorization: Bearer ' . $bearer_token
		));
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		$respose = curl_exec($ch);
		curl_close($ch);
		return $respose;
	}
	
}

function checkGAUser($iUserID)
{
	$response = array();
	$query2 = "SELECT cEmail from gen_User where iUserID='" . $iUserID . "' and is_primary_account=1";
	$dbHost2 = new SQL();
	$dbHost2->query($query2);
	$iNumRows2 = $dbHost2->getNumRows();
	if ($iNumRows2 > 0) {
		$response = ['status' => true, 'message' => 'Primary account Found.'];
	} else {
		$response = ['status' => false, 'message' => 'No primary account exist in our record.'];
	}
	return $response;
}



