<?php
include 'common.php';

const MAX_EXPENDING_COUNT = 3;

function CheckIsMaster($dbhandle, $guild_uid, $character_uid)
{
	$stmt = $dbhandle->prepare("SELECT master_uid FROM guild_info WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$stmt->execute();
	$result = $stmt->get_result();
	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$master_uid = $row["master_uid"];
			mysqli_stmt_free_result($stmt);

			if ($character_uid == $master_uid)
			{
				return true;
			}
			else
			{
				$return = "NOT_HAVE_PERMISSION";
				$error = "";
				$response = array('result'=>$return,'error'=>$error);
				EchoResponse($response);

				mysqli_close($dbhandle);
				exit;
			}
		}
		else
		{
			$return = "NO_EXIST_GUILD";
			$error = "";
			$response = array('result'=>$return,'error'=>$error);
			EchoResponse($response);

			mysqli_close($dbhandle);
			exit;
		}
	}
	else
	{
		$return = "DB_ERROR";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);
		EchoResponse($response);

		mysqli_close($dbhandle);
		exit;
	}
}

function GetExpendingCount($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("SELECT expending_count FROM guild_info WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			return $row["expending_count"];
		}
		else
		{
			$return = "NO_EXIST_GUILD_INFO";
			$error = mysqli_error($dbhandle);
			$response = array('result'=>$return,'error'=>$error);

			EchoResponse($response);

			mysqli_close($dbhandle);
		exit;
		}
	}
	else
	{
		$return = "DB_ERROR";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);

		EchoResponse($response);

		mysqli_close($dbhandle);
		exit;
	}
}
function GetGuildGold($dbhandle, $guild_uid)
{
	$gold = 0;

	$stmt = $dbhandle->prepare("SELECT gold FROM guild_insidedata WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$stmt->execute();
	$result = $stmt->get_result();
	if ($result)
	{
		if ($row = $result->fetch_assoc())
		{
			$gold = $row["gold"];
			mysqli_stmt_free_result($stmt);
		}
		else
		{
			$return = "NO_EXIST_GUILD_INSIDEDATA";
			$error = "";
			$response = array('result'=>$return,'error'=>$error);

			EchoResponse($response);

			mysqli_close($dbhandle);
			exit;
		}
	}
	else
	{
		$return = "DB_ERROR";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);

		EchoResponse($response);

		mysqli_close($dbhandle);
		exit;
	}
	return $gold;
}
function ConsumeGuildGold($dbhandle, $guild_uid, $character_uid, $gold_price)
{
	$success = false;
	if($gold_price >0)
	{	
		
		$current_gold = GetGuildGold($dbhandle,$guild_uid);
		if($current_gold < $gold_price)
		{
			$return = "NOT_ENOUGH_GOLD";
			$error = "";
			$response = array('result'=>$return,'error'=>$error);

			EchoResponse($response);

			mysqli_close($dbhandle);
			exit;
		}
		else
		{			
			$stmt = $dbhandle->prepare("UPDATE guild_insidedata SET gold=gold-? where guild_uid=?");
			$stmt->bind_param("ii", $gold_price, $guild_uid);
			$result = $stmt->execute();
			$stmt->close();
			
			if($result)
			{
				LogGuildGold($dbhandle, $guild_uid, $character_uid, $gold_price, 'EXPEND');
				$success =true;
			}
						 
		}		
	}
	
	return $success;
}
function LogGuildGold($dbhandle, $guild_uid, $character_uid, $gold, $using_type)
{
	$now = new DateTime();
	$now->setTimezone(new DateTimeZone('UTC'));
	$curdate =  date_format($now, "Y-m-d H:i:s");

	$stmt = $dbhandle->prepare("INSERT INTO guild_asset_log (guild_uid, character_uid, asset_type, amount, type, date) VALUES(?,?,'gold',?,?,?)");
	$stmt->bind_param("iiiss", $guild_uid, $character_uid, $gold, $using_type, $curdate);
	$result = $stmt->execute();
	$stmt->close();	
	
	if($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function GuildExpending($guild_uid, $account_id, $character_uid, $login_key, $gold_price)
{
	//Connect DB
	$dbhandle = DB_Connect();
	
	
	$db_selected = mysqli_select_db($dbhandle, DB_NAME)
	or die("Could not select db");

	if(!CheckLoginKey($dbhandle, $account_id, $login_key))
	{
		PrintLoginKeyError();
		mysqli_close($dbhandle);
		return;
	}

	if (CheckIsMaster($dbhandle, $guild_uid, $character_uid))
	{
		$expending_count = GetExpendingCount($dbhandle, $guild_uid);
		if ($expending_count >= MAX_EXPENDING_COUNT)
		{
			$return = "MAX_EXPENDING_COUNT";
			$error = "";
			$response = array('result'=>$return,'error'=>$error);
			EchoResponse($response);
		}
		else
		{
			if (ConsumeGuildGold($dbhandle, $guild_uid, $character_uid, $gold_price))
			{
				$next_expend_step = $expending_count+1;
				$stmt = $dbhandle->prepare("UPDATE guild_info SET expending_count=? WHERE guild_uid=?");
				$stmt->bind_param("ii", $next_expend_step, $guild_uid);
				$result = $stmt->execute();
				$stmt->close();
				
				if($result)
				{
					$return = "GUILD_EXPENDING_OK";
					$error = "";
					$response = array('result'=>$return,'error'=>$error);
					EchoResponse($response);
				}
				else
				{
					$return = "DB_ERROR";
					$error = mysqli_error($dbhandle);
					$response = array('result'=>$return,'error'=>$error);
					EchoResponse($response);
				}
			}
		}
	}
		
	mysqli_close($dbhandle);
}
function EchoResponse($response)
{
	$isXmlHttpRequest = (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) ?
	(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false: false;
	($isXmlHttpRequest) ? header('Content-type: application/json') : header('Content-type: text/plain');
 
	echo json_encode($response);
}

$guild_uid = $_GET['guild_uid'];
$account_id = $_GET['account_id'];
$character_uid = $_GET['character_uid'];
$login_key = $_GET['login_key'];
$gold_price = $_GET['gold_price'];

if(CheckValidatedServerIP())
{
	GuildExpending($guild_uid, $account_id, $character_uid, $login_key, $gold_price);
}
else
{
	$response = "INVALIDATED_SERVER";
	$error = "CheckValidatedServerIP ERROR";
	$isXmlHttpRequest = (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) ?
	(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false: false;
	($isXmlHttpRequest) ? header('Content-type: application/json') : header('Content-type: text/plain'); 
 
	echo json_encode(array(	'result'=>$response,'error'=>$error	));
}


?>