<?php
include_once('../tools/validate_cookie.php');
include_once('ring_session_manager_itf.php');
include_once('../tools/domain_info.php');
include_once('../login/config.php');

function planEditSession($charId, $domainId, $sessionType, $title, $desc)
{
	$domainInfo = getDomainInfo($domainId);
	$addr = split(":", $domainInfo["session_manager_address"]);
	$RSMHost = $addr[0];
	$RSMPort = $addr[1];

	$rsm = new ScheduleSessionCb();
	$res="";
	$rsm->connect($RSMHost, $RSMPort, $res);
	if ($res != "")
	{
		echo "Error connecting to session manager<br>";
		echo '<a href="web_start.php">Return to start menu</a>';
		die();
	}

	// send the create session message
	$rsm->scheduleSession(
		$charId, 
		$sessionType,
		$title, 
		0,
		$desc, 
		"sl_a", 
		"at_public", 
		"rt_liberal", 
		"et_short", 
		0			// 0 inscription slots for edit session
		);
	
	$rsm->waitCallback();
	// the rest of the work is done in the callback
}

$SessionId = 0;
$DomainId = 0;
$SessionToolsResult = false;

class ScheduleSessionCb extends CRingSessionManagerWeb
{
	function scheduleSessionResult($charId, $sessionId, $result, $resultString)
	{
		global $SessionId, $DomainId, $SessionToolsResult;
		$SessionId = $sessionId;
//		$DomainId = $domainId;
		echo "Create session result :<br>";
		if ($result == 0)
		{
			$SessionToolsResult = true;
			echo "Session $sessionId created for char $charId<br>";
			echo "<h2>Your session has been planned, thank you<h2><br>";
		}
		else
		{
			$SessionToolsResult = false;
			echo "Failed to create a session for char $charId with error $resultString <br>";
		}
	}
}

$rsmProxy = false;
$callbackClient = false;
$rsmSkel = false;

function startSession($charId, $domainId, $sessionId)
{
	global $SessionId, $DomainId, $SessionToolsResult;

	$domainInfo = getDomainInfo($domainId);
	$addr = split(":", $domainInfo["session_manager_address"]);
	$RSMHost = $addr[0];
	$RSMPort = $addr[1];

	$SessionId = $sessionId;
	$DomainId = $domainId;
	
	// ask to start the session
	global $rsmProxy, $callbackClient, $rsmSkel;
	$startSession = new StartSessionCb;
	$res = "";
	$startSession->connect($RSMHost, $RSMPort, $res);
	echo "Starting session for character ".$charId." in session ".$sessionId."<br>";
	global $SessionId;
	$SessionId = $sessionId;
	$startSession->startSession($charId, $sessionId);
	
	// wait the the return message
	$startSession->waitCallback() or die("No reponse from session manager");
}

function inviteOwnerInSession($charId, $domainId, $sessionId)
{
	global $SessionId, $DomainId, $SessionToolsResult;

	// first, set the result to false
	$SessionToolsResult = false;

	$domainInfo = getDomainInfo($domainId);
	$addr = split(":", $domainInfo["session_manager_address"]);
	$RSMHost = $addr[0];
	$RSMPort = $addr[1];
	
	global $rsmProxy, $rsmSkel, $userId, $charId, $callbackClient, /*$SessionId,*/ $SessionToolsResult;
	global $DBHost, $RingDBUserName, $RingDBPassword;

	$SessionId = $sessionId;
	$DomainId = $domainId;

	$link = mysqli_connect($DBHost, $RingDBUserName, $RingDBPassword) or die("Can't connect to ring database");
	mysqli_select_db($link, $domainInfo['ring_db_name']) or die ("Can't access to the db dbname:" . $domainInfo['ring_db_name']);

	$sessionId = (int) $sessionId;
	$query = "select session_type from sessions where session_id=".$sessionId;
	$result = mysqli_query($link, $query) or die ("Can't execute the query: ".$query);
	if (mysqli_num_rows($result) != 1)
	{
		echo "Can't find 1 row for ring session ".$sessionId."<br>";
		die();
	}
	$row = mysqli_fetch_row($result);
	$session_type = $row[0];
	$mode = ($session_type == "st_edit") ? "sps_edit_invited" : "sps_anim_invited";
	echo "Inviting character ".$charId." of user ".$userId." in session ".$sessionId."<br>";

	$inviteOwner = new InviteOwnerCb;
	$res = "";
	$inviteOwner->connect($RSMHost, $RSMPort, $res);
	$inviteOwner->inviteCharacter($charId, $sessionId, $charId, $mode);

	// wait the the return message
	if ($inviteOwner->waitCallback() == false)
	{
		echo "No response from server, invite failed<br>";
		die();
	}
}

class StartSessionCb extends CRingSessionManagerWeb
{
	function invokeResult($userId, $resultCode, $resultString)
	{
		global $rsmProxy, $rsmSkel, $userId, $charId, $callbackClient, $SessionId, $DomainId, $SessionToolsResult;
		
		if ($resultCode != 0)
		{
			$SessionToolsResult = false;
			echo "<h1>Error ".$resultCode." : '".$resultString."' while trying to start the session ".$SessionId."</h1>";
			echo '<p><p><a href="web_start.php">Back to menu</a>';
		}
		else
		{
			// ok, the session is started, invite the session owner in the session
			$SessionToolsResult = false;
			
			echo "Start of session $SessionId success, now inviting character $charId in the sesison<br>";
			
			inviteOwnerInSession($charId, $DomainId, $SessionId);
		}
	}
}

class InviteOwnerCb extends CRingSessionManagerWeb
{
	function invokeResult($userId, $resultCode, $resultString)
	{
		global $rsmProxy, $rsmSkel, $userId, $charId, $callbackClient, $SessionId, $DomainId, $SessionToolsResult;
		
		// jump back to main page
		echo "<h1>The session ".$SessionId." have been started</h1>";
		if ($resultCode == 0)
		{
			$SessionToolsResult = true;
			echo "<h1>You are automaticaly invited in the session</h1>";
		}
		else
		{
			$SessionToolsResult = false;
			echo "<h1>Failed to invite you in the started session !</h1>";
			echo "<h1>Error ".$resultCode." : '".$resultString."' while trying to join the session ".$SessionId."</h1>";
		}
		echo '<p><p><a href="web_start.php">Back to menu</a>';
	}
}