<?php
include 'common.php';



function DuplicateCheck($dbhandle, $guild_name)
{
	$stmt = $dbhandle->prepare("SELECT COUNT(*) FROM guild_info WHERE UPPER(guild_name)=UPPER(?)");
	$stmt->bind_param("s", $guild_name);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$count = $row["COUNT(*)"];

			mysqli_stmt_free_result($stmt);
			if ($count == 0)
			{
				return true;
			} 
			else 
			{
				$return = "GUILD_NAME_DUPLICATECHECK_FAIL";
				$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 AlreadyEnterGuildCheck($dbhandle, $character_uid)
{
	$stmt = $dbhandle->prepare("SELECT COUNT(*) FROM guild_member WHERE character_uid=? AND is_deport=0");
	$stmt->bind_param("i", $character_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$count = $row["COUNT(*)"];

			mysqli_stmt_free_result($stmt);
			if ($count == 0)
			{
				return true;
			} 
			else 
			{
				$return = "ALREADY_ENTERED_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 CreateGuildInfo($dbhandle, $guild_name, $character_uid)
{
	$bp = GetBP($dbhandle, $character_uid);

	$stmt = $dbhandle->prepare("INSERT INTO guild_info (guild_name, master_uid, guild_bp, number_of_member, expending_count) VALUES(?,?,?,1,0)");
	$stmt->bind_param("sii", $guild_name, $character_uid, $bp);
	$result = $stmt->execute();
	$stmt->close();	
	if($result)
	{
		return true;
	}
	else
	{
		$return = "CREATE_GUILD_INFO_FAIL";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);

		EchoResponse($response);
		mysqli_close($dbhandle);
		exit;
	}
}
function CreateGuildInsideData($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("INSERT INTO guild_insidedata (guild_uid) VALUES(?)");
	$stmt->bind_param("i", $guild_uid);
	$result = $stmt->execute();
	$stmt->close();	
	if($result)
	{
		return true;
	}
	else
	{
		$return = "CREATE_GUILD_INSIDEDATA_FAIL";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);

		EchoResponse($response);
		mysqli_close($dbhandle);
		exit;
	}
}
function GetBP($dbhandle, $character_uid)
{
	$stmt = $dbhandle->prepare("SELECT bp FROM character_list WHERE character_uid=?");
	$stmt->bind_param("i", $character_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$bp = $row["bp"];
			mysqli_stmt_free_result($stmt);
			return $bp;
		}
	}
	else
	{
		$return = "DB_ERROR";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);

		EchoResponse($response);
		mysqli_close($dbhandle);
		exit;
	}
}
function JoinGuild($dbhandle, $guild_uid, $character_uid)
{
	$now = new DateTime();
	$now->setTimezone(new DateTimeZone('UTC'));
	$joindate =  date_format($now, "Y-m-d H:i:s");

	$stmt = $dbhandle->prepare("INSERT INTO guild_member (guild_uid, character_uid, grade, joindate, is_deport) VALUES(?,?,2,?,0)");
	$stmt->bind_param("iis", $guild_uid, $character_uid, $joindate);
	$result = $stmt->execute();
	$stmt->close();	
	
	if($result)
	{
		return true;
	}
	else
	{
		$return = "JOIN_GUILD_FAIL";
		$error = mysqli_error($dbhandle);
		$response = array('result'=>$return,'error'=>$error);

		EchoResponse($response);
		mysqli_close($dbhandle);
		exit;
	}
}
function DeleteGuildApplication($dbhandle, $character_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM guild_apply WHERE character_uid=?");
	$stmt->bind_param("i", $character_uid);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
	{
		return true;
	}
	
	return false;
}

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);
}

function CreateGuild($guild_name, $account_id, $character_uid, $gold_price, $crystal_price, $login_key)
{
	//Connect DB
	$dbhandle = DB_Connect();
	
	$db_selected = mysqli_select_db($dbhandle, DB_NAME)
	or die("Could not select db");

	mysqli_query($dbhandle,"set session character_set_connection=utf8;");
	mysqli_query($dbhandle,"set session character_set_results=utf8;");
	mysqli_query($dbhandle,"set session character_set_client=utf8;");

	if(!CheckLoginKey($dbhandle, $account_id, $login_key))
	{
		PrintLoginKeyError();
		mysqli_close($dbhandle);
		return;
	}

	$result_duplicateCheck = DuplicateCheck($dbhandle, $guild_name);
	if ($result_duplicateCheck)
	{
		$result_enterGuild = AlreadyEnterGuildCheck($dbhandle, $character_uid);
		if ($result_enterGuild)
		{
			if (_ConsumeGold($dbhandle, $account_id, $character_uid, $gold_price))
			{
				if (_ConsumeCrystal($dbhandle, $account_id, $crystal_price))
				{
					$result_createGuildInfo = CreateGuildInfo($dbhandle, $guild_name, $character_uid);
					if ($result_createGuildInfo)
					{
						$guild_uid = mysqli_insert_id($dbhandle);
						$result_createGuildInsideData = CreateGuildInsideData($dbhandle, $guild_uid);
						if ($result_createGuildInsideData)
						{
							$result_join = JoinGuild($dbhandle, $guild_uid, $character_uid);
							if ($result_join)
							{
								DeleteGuildApplication($dbhandle, $character_uid);
								$return = "CREATE_GUILD_OK";
								$error = "";
								$response = array('result'=>$return,'error'=>$error);
	
								EchoResponse($response);
							}
						}
					}
				}
				else
				{
					$return = "NOT_ENOUGH_CRYSTAL";
					$error = "";
					$response = array('result'=>$return,'error'=>$error);

					EchoResponse($response);
				}
			}
			else
			{
				$return = "NOT_ENOUGH_GOLD";
				$error = "";
				$response = array('result'=>$return,'error'=>$error);

				EchoResponse($response);
			}
		}
	}

	
	mysqli_close($dbhandle);
}


$json = json_decode(file_get_contents('php://input'));
$guild_name = $json->guild_name;
$account_id = $json->account_id;
$character_uid = $json->character_uid;
$gold_price = $json->gold_price;
$crystal_price = $json->crystal_price;
$login_key = $json->login_key;

if(CheckValidatedServerIP())
{
	CreateGuild($guild_name, $account_id, $character_uid, $gold_price, $crystal_price, $login_key);
}
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	));
}


?>

