<?php
include 'common.php';

function DeleteGuildInfo($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM guild_info WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function DeleteGuildApply($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM guild_apply WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function DeleteGuildInsidedata($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM guild_insidedata WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
	{
		return true;
	}
	else
	{
		
		return false;
	}
}
function DeleteGuildDonationList($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM guild_asset_log WHERE guild_uid=?");
	$stmt->bind_param("i", $guild_uid);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function ChangeGuilNumberOfMember($dbhandle, $guild_uid)
{
	$stmt = $dbhandle->prepare("SELECT count(*) AS cnt FROM guild_member WHERE guild_uid=? AND is_deport=0");
	$stmt->bind_param("i", $guild_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$guild_member_count = $row["cnt"];
			mysqli_stmt_free_result($stmt);

			$stmt2 = $dbhandle->prepare("UPDATE guild_info SET number_of_member=? WHERE guild_uid=?");
			$stmt2->bind_param("ii", $guild_member_count, $guild_uid);
			$result2 = $stmt2->execute();
			$stmt2->close();
					
			if($result2)
			{
				return true;
			}
		}
	}

	return false;
}
function SumGuildBP($dbhandle, $guild_uid)
{
	$guild_bp = 0;
	$stmt = $dbhandle->prepare("SELECT SUM(b.bp) FROM guild_member AS a INNER JOIN character_list AS b ON a.character_uid = b.character_uid WHERE a.guild_uid=? AND a.is_deport=0");
	$stmt->bind_param("i", $guild_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			if (isset($row["SUM(b.bp)"]))
			{
				$guild_bp = $row["SUM(b.bp)"];
			}
		}
	}
	return $guild_bp;
}
function SetGuildBP($dbhandle, $guild_uid, $guild_bp)
{
	$stmt = $dbhandle->prepare("UPDATE guild_info SET guild_bp=? WHERE guild_uid=?");
	$stmt->bind_param("ii", $guild_bp, $guild_uid);
	$result = $stmt->execute();
	$stmt->close();
			
	if($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function UpdateGuildBP($dbhandle, $guild_uid)
{
	$guild_bp = SumGuildBP($dbhandle, $guild_uid);
	SetGuildBP($dbhandle, $guild_uid, $guild_bp);
}
function CharacterDelete_Guild($dbhandle, $account_id, $char_name)
{
	$stmt = $dbhandle->prepare("SELECT character_uid FROM character_list WHERE user_id=? AND character_name=?");	
	$stmt->bind_param("ss", $account_id, $char_name);
	$stmt->execute();
	$result = $stmt->get_result();
	if($result)
	{
		if ($row = $result->fetch_assoc())
		{
			$character_uid = $row["character_uid"];
			mysqli_stmt_free_result($stmt);

			CheckGuildMember($dbhandle, $character_uid);
		}
	}
}
function ChangeGuildMaster($dbhandle, $guild_uid, $master_uid)
{
	//다음 길드마스터 선택
	$stmt = $dbhandle->prepare("SELECT character_uid FROM guild_member WHERE guild_uid=? AND character_uid!=? AND grade!=2 AND is_deport=0 ORDER BY grade DESC");
	$stmt->bind_param("ii", $guild_uid, $master_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$new_master_uid = $row["character_uid"];
			if (ChangeMemberGrade($dbhandle, $guild_uid, $new_master_uid))
			{
				if (ChangeMaster_GuildInfo($dbhandle, $guild_uid, $new_master_uid))
				{
					DeleteGuildMember($dbhandle, $guild_uid, $master_uid);
					DeleteGuildApply($dbhandle, $master_uid);
				}
			}
		}
		else
		{
			//길드에 남은 길드원이 없을경우 길드해체
			DeleteGuildInfo($dbhandle, $guild_uid);
			DeleteGuildApply($dbhandle, $guild_uid);
			DeleteGuildInsidedata($dbhandle, $guild_uid);
			DeleteGuildDonationList($dbhandle, $guild_uid);
			DeleteGuildMember($dbhandle, $guild_uid, $master_uid);
			DeleteGuildApply($dbhandle, $master_uid);
			
		}
		
		mysqli_stmt_free_result($stmt);
	}
}
function ChangeMaster_GuildInfo($dbhandle, $guild_uid, $new_master_uid)
{
	$stmt = $dbhandle->prepare("UPDATE guild_info SET master_uid=? WHERE guild_uid=?");
	$stmt->bind_param("ii", $new_master_uid, $guild_uid);
	$result = $stmt->execute();
	$stmt->close();
	
	if($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function ChangeMemberGrade($dbhandle, $guild_uid, $character_uid)
{
	$stmt = $dbhandle->prepare("UPDATE guild_member SET grade=2 WHERE guild_uid=? AND character_uid=?");
	$stmt->bind_param("ii", $guild_uid, $character_uid);
	$result = $stmt->execute();
	$stmt->close();
	
	if($result)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function CheckGuildMember($dbhandle, $character_uid)
{
	$stmt = $dbhandle->prepare("SELECT * FROM guild_member WHERE character_uid=?");
	$stmt->bind_param("i", $character_uid);
	$stmt->execute();
	$result = $stmt->get_result();

	if ($result)
	{
		if($row = $result->fetch_assoc())
		{
			$guild_uid = $row["guild_uid"];
			$grade = $row["grade"];
			if ($grade == 2) //길드마스터
			{
				ChangeGuildMaster($dbhandle, $guild_uid, $character_uid);
			}
			else
			{
				DeleteGuildMember($dbhandle, $guild_uid, $character_uid);
				DeleteGuildApplication($dbhandle, $character_uid);
			}
	
			
			mysqli_stmt_free_result($stmt);
		}
		else //길드가 없으면
		{
			DeleteGuildApplication($dbhandle, $character_uid);
		}
		
	}
	
}
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 DeleteGuildMember($dbhandle, $guild_uid, $character_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM guild_member WHERE guild_uid=? AND character_uid=?");
	$stmt->bind_param("ii", $guild_uid, $character_uid);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
	{
		UpdateGuildBP($dbhandle, $guild_uid);
		ChangeGuilNumberOfMember($dbhandle, $guild_uid);
		return true;
	}
	return false;
}
function CheckCharacterLevel($dbhandle, $account_id, $char_name)
{
	$stmt = $dbhandle->prepare("select level from character_list where user_id=? and character_name=?");	
	$stmt->bind_param("ss", $account_id, $char_name);
	$stmt->execute();
	$result = $stmt->get_result();
	$row = $result->fetch_assoc();
	
	mysqli_stmt_free_result($stmt);
	
	if($row["level"] >= 5)
	{
		return true;
	}
	else
	{
		return false;
	}

	
}
function DeletecCharacter($account_id, $char_name, $ticket, $platform, $login_key)
{
	$response = "DELETE_FAILED";
	$error = "";
	$msg = "";
	
	$dbhandle = DB_Connect();
	//Select DB
	$db_selected = mysqli_select_db($dbhandle, DB_NAME) or die("Could not select db");
	
	$login_key_check =false;
	
	
	if(!CheckLoginKey($dbhandle, $account_id, $login_key))
	{
		$response = "LOGIN_KEY_ERROR";
		$error = "Invalid Login Key";
		$login_key_check = true;		
		$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));
		
		return;
	}
	

	if (CheckTicket($platform, $account_id, $ticket) || $platform === 'unknown')
	{
		
	
		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(true /*CheckCharacterLevel($dbhandle, $account_id, $char_name)*/)
		{
			$stmt = $dbhandle->prepare("update character_list set deleted=true, deleted_time=CURTIME() where user_id=? and character_name=?");
			$stmt->bind_param("ss", $account_id, $char_name);
			$result = $stmt->execute();
			$stmt->close();
			
			if($result)
			{
				CharacterDelete_Guild($dbhandle, $account_id, $char_name);
				$response = "DELETE_OK";
				$error = "";	
			}
			else
			{
				$response = "DELETE_FAILED";
				$error = mysqli_error($dbhandle);
			}
		}
		else
		{
			$response = "DELETE_FAILED";
			$msg = "L_CannotDeleteCharacter_5LevelBelow";//"Characters below level 5 cannot be deleted";
			$error = "";	
		}
		
		mysqli_close($dbhandle);
	}
	else 
	{
		$response = "DELETE_FAILED";
		$error = "Authentication Failed";
	}

	$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, 'result_msg'=>$msg, 'error'=>$error));
}

DeletecCharacter($_GET['id'], $_GET['char_name'], $_GET['ticket'], $_GET['platform'], $_GET['login_key']);

?>