<?php
include 'common.php';


function PrintDebug($response, $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));
	exit; 
}


function GetRestoreGold_Active($dbhandle, $level)
{
	$stmt = $dbhandle->prepare("select gold from reset_skill_restore where level=?");	
	$stmt->bind_param("i", $level);
	$stmt->execute();
	$result = $stmt->get_result();

	mysqli_stmt_free_result($stmt);
			
	$error = "";
	
	if($row = $result->fetch_assoc())
	{
		if($row["gold"] > 0)
		{
			return $row["gold"];
		}
	}
	
	return 0;
}

function GetRestoreSkillBook_Active($dbhandle, $level)
{
	$stmt = $dbhandle->prepare("select skill_book from reset_skill_restore where level=?");	
	$stmt->bind_param("i", $level);
	$stmt->execute();
	$result = $stmt->get_result();

	mysqli_stmt_free_result($stmt);
			
	$error = "";
	
	if($row = $result->fetch_assoc())
	{
		if($row["skill_book"] > 0)
		{
			return $row["skill_book"];
		}
	}
	
	return 0;
}

function GetRestoreGold_Passive($dbhandle, $level)
{
	$stmt = $dbhandle->prepare("select gold from reset_skill_restore_passive where level=?");	
	$stmt->bind_param("i", $level);
	$stmt->execute();
	$result = $stmt->get_result();

	mysqli_stmt_free_result($stmt);
			
	$error = "";
	
	if($row = $result->fetch_assoc())
	{
		if($row["gold"] > 0)
		{
			return $row["gold"];
		}
	}
	
	return 0;
}

function GetRestoreSkillBook_Passive($dbhandle, $level)
{
	$stmt = $dbhandle->prepare("select skill_book from reset_skill_restore_passive where level=?");	
	$stmt->bind_param("i", $level);
	$stmt->execute();
	$result = $stmt->get_result();

	mysqli_stmt_free_result($stmt);
			
	$error = "";
	
	if($row = $result->fetch_assoc())
	{
		if($row["skill_book"] > 0)
		{
			return $row["skill_book"];
		}
	}
	
	return 0;
}


function DeleteOwnedSkill($dbhandle, $character_uid)
{

	$stmt = $dbhandle->prepare("delete from owned_skill where character_uid=?");
	$stmt->bind_param("i",  $character_uid);
	$result = $stmt->execute();
	$stmt->close();	
	
	if($result)
	{
		
		$stmt = $dbhandle->prepare("update character_list set skill_slot_0=-1, skill_slot_1=-1, skill_slot_2=-1, skill_slot_3=-1 where character_uid=?");
		$stmt->bind_param("i",  $character_uid);
		$result = $stmt->execute();
		$stmt->close();	
		
		
		return true;
	}
	
	return false;
}


function RestoreGold($dbhandle,$account_id, $character_uid, $gold)
{
			//add gold
			//add skill_book
			
	$stmt = $dbhandle->prepare("update character_list set gold=gold+? where user_id=? and character_uid=?");
	$stmt->bind_param("isi",  $gold , $account_id,$character_uid);
	$result = $stmt->execute();
	$stmt->close();	
	
	if($result)
	{
		return true;
	}
	
	return false;
	
}

function RestoreSkillBook($dbhandle,$account_id, $character_uid, $skill_book, $lang)
{
	
	
	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;");
	
	$now = new DateTime();
	$now->setTimezone(new DateTimeZone('UTC'));
	$strTime =  date_format($now, "Y-m-d H:i:s");
	  
	
	$mail_title = "스킬 초기화로 스킬북을 돌려받았습니다";
	$mail_content = "스킬 초기화로 스킬북을 돌려받았습니다";
	
	if($lang == 'en')
	{
		$mail_title = "The skill book was returned by initializing the skill";
		$mail_content = "The skill book was returned by initializing the skill";
	}
	
	else if($lang == 'th')
	{
		$mail_title = "หนังสือทักษะถูกส่งคืนโดยการเริ่มต้นทักษะ";
		$mail_content = "หนังสือทักษะถูกส่งคืนโดยการเริ่มต้นทักษะ";
	}
	
	$item_uid = 30110;
	$item_count = $skill_book;
	
	$strQuery = "INSERT INTO mail_box_character (character_id, title, content, item_id, item_count, time_limit, time_send) VALUES (".$character_uid.", '".$mail_title."', '".$mail_content."', ".$item_uid.", ".$item_count.", 720, '".$strTime."')";
	if($result = @mysqli_query($dbhandle, $strQuery))
	{
		return true;
	}
	
	return false;
		
}


function InsertResetSkillLog($dbhandle, $account_id, $character_uid, $gold, $skill_book, $log_skill_uid, $log_skill_level)
{
	
	$now = new DateTime();
	$now->setTimezone(new DateTimeZone('UTC'));
	$login_log_time =  date_format($now, "Y-m-d H:i:s");

	$stmt = $dbhandle->prepare("insert into reset_skill_log (user_id, character_uid, restore_gold, restore_book, log_time, price, prev_skill_uid, prev_skill_level) values(?,?,?,?,?,1,?,?)"); //price =0 은 무료, price=1 이면 유료아이템사용
	$stmt->bind_param("siiisss", $account_id, $character_uid, $gold, $skill_book, $login_log_time, $log_skill_uid, $log_skill_level);
	$result = $stmt->execute();
	$stmt->close();	
	
	if($result)
	{
		return true;
	}
	
	return false;
}

function ConsumResetSkillItem($dbhandle, $char_uid, $inven_uid)
{	
	$delete_query = "delete from owned_item where owned_item_uid=".$inven_uid." and character_uid=".$char_uid;
	//Query Result
	$result = @mysqli_query($dbhandle,$delete_query);	
	if($result)
	{
		return true;
	}
	
	return false;
}

function HasOwnedSkill($dbhandle, $character_uid)
{
	$stmt = $dbhandle->prepare("select count(*) as cnt  from owned_skill where character_uid=?");	
	$stmt->bind_param("i", $character_uid );
	$stmt->execute();
	$result = $stmt->get_result();
	if($row = $result->fetch_assoc())
	{
		if($row["cnt"] > 0)
			return true;
	}
	
	return false;
	
	
	
}

function UseItem_ResetSkill($account_id, $char_uid, $login_key, $pay_amount_gold, $pay_amount_crystal, $inven_uid, $item_uid, $lang)
{
	$dbhandle = DB_Connect();
	//Select DB
	$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($pay_amount_gold > 0) //case of Purchase
	{
		_ConsumeGold($dbhandle, $account_id, $char_uid, $pay_amount_gold);
	}
	
	if($pay_amount_crystal > 0) //case of Purchase
	{
		_ConsumeCrystal($dbhandle, $account_id, $pay_amount_crystal);
	}
	
	
	if($inven_uid != -1)
	{
		//아이템 소모
		ConsumResetSkillItem($dbhandle, $char_uid, $inven_uid);
	}
	
	$response = "RESET_SKILL_FAILED";
	$error = "";
	
	$gold_total = 0;
	$skill_book_total = 0;
		
	if(HasOwnedSkill($dbhandle,$char_uid))
	{
		$log_skill_uid = "";
		$log_skill_level = "";

		//-------------------------------------
		// Active Skill
		//---------------------------------------
		$stmt = $dbhandle->prepare("select *  from owned_skill where character_uid=? and is_passive=0");	
		$stmt->bind_param("i", $char_uid );
		$stmt->execute();
		$result = $stmt->get_result();
		
		$gold_active =0;
		$skill_book_active=0;	
		if($result)
		{
			while($row = $result->fetch_assoc())
			{			
				$skill_level = $row["level"];
				if($skill_level >0)
				{
					$gold_active += GetRestoreGold_Active($dbhandle,$skill_level);
					$skill_book_active += GetRestoreSkillBook_Active($dbhandle,$skill_level);	
					$log_skill_uid.= $row["skill_uid"]."/";
					$log_skill_level.= $skill_level."/";
				}
			}		
		}
		else
		{
			PrintDebug($response,"DB Query Error");
		}
		
		//-------------------------------------
		// Passive Skill
		//---------------------------------------
		$stmt = $dbhandle->prepare("select *  from owned_skill where character_uid=? and is_passive=1");	
		$stmt->bind_param("i", $char_uid );
		$stmt->execute();
		$result = $stmt->get_result();
		
		$gold_passive =0;
		$skill_book_passive=0;		
		if($result)
		{
			
			while($row = $result->fetch_assoc())
			{			
				$skill_level = $row["level"];
				
				if($skill_level >0)
				{
					$gold_passive += GetRestoreGold_Passive($dbhandle,$skill_level);
					$skill_book_passive += GetRestoreSkillBook_Passive($dbhandle,$skill_level);
					$log_skill_uid.= $row["skill_uid"]."/";
					$log_skill_level.= $skill_level."/";
				}
			}	
		}
		else
		{
			PrintDebug($response,"DB Query Error");
		}
		
		//------------------------
		// restore gold and skill books
		//-------------------------------
		$gold_total = $gold_active + $gold_passive;
		$skill_book_total = $skill_book_active + $skill_book_passive;		

		if(DeleteOwnedSkill($dbhandle, $char_uid))
		{
			if(RestoreGold($dbhandle,$account_id, $char_uid, $gold_total))
			{
				RestoreSkillBook($dbhandle,$account_id, $char_uid, $skill_book_total, $lang);
				InsertResetSkillLog($dbhandle, $account_id, $char_uid, $gold_total, $skill_book_total, $log_skill_uid, $log_skill_level);			
				$response = "RESET_SKILL_OK";		
			}	
		}		
	}	
	
	mysqli_close($dbhandle);
 
    $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, 'restore_gold'=>$gold_total, 'restore_book'=>$skill_book_total, 'pay_amount_crystal'=>$pay_amount_crystal, 'pay_amount_gold'=>$pay_amount_gold, 'item_uid'=>$item_uid));
}


$json = json_decode(file_get_contents('php://input'));
$account_id = $json->account_id;
$char_uid = $json->char_uid;
$login_key = $json->login_key;
$pay_amount_crystal = $json->pay_amount_crystal;
$pay_amount_gold = $json->pay_amount_gold;
$inven_uid = $json->inven_uid;
$item_uid = $json->item_uid;
$lang = $json->lang;



if(CheckValidatedServerIP())
{
	UseItem_ResetSkill($account_id, $char_uid, $login_key, $pay_amount_gold, $pay_amount_crystal, $inven_uid, $item_uid, $lang);

}
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	));
}

?>