<?php

include 'common.php';

/*
		Knight		Priest		Archer
모자 	  	20	        460	    	530
갑옷 		600	        1000		15300
신발 		660	      	14500		15500
무기  	100	        400	        15100
보조무기	200	        440			15200
장갑 		630	        1100		15400

*/

function CheckForbiddenName($character_name)
{
	$character_name = strtolower($character_name);
	if($character_name == 'fuck' ||
	$character_name == 'sex' ||
	$character_name == 'jesus' ||
	$character_name == 'GM' ||
	$character_name == '운영자')
	{
		return false;
	}
	return true;
}

function GetDefaultParts($class_id)
{
	switch($class_id)
	{
		case 1: //knight
			//return array(0,600,0,100,0,0,0); //head=1,body=6,leg=8,weapon=2,shield=4,quiver=5,arm=7
			return array(20,600,660,100,200,0,630); //head=1,body=6,leg=8,weapon=2,shield=4,quiver=5,arm=7
		break;
		case 2: //knight female
			return array(0,0,0,0,0,0,0);
		break;
		case 3: // not exist
			return array(0,0,0,0,0,0,0);
		break;
		case 4: // priest female
			return array(460,1000,14500,400,440,0,1100);
		break;
		case 5: // archer
			return array(530,15300,15500,15100,0,15200,15400);
		break;
	}
	return array(0,0,0,0,0,0,0);
}

function GetDefaultPartsAtt($class_id)
{
	// switch($class_id)
	// {
		// case 1: //knight
			// return array(0,0,0,1,0,0,0); //head=1,body=6,leg=8,weapon=2,shield=4,quiver=5,arm=7
		// break;
		// case 2: //knight female
			// return array(0,0,0,1,0,0,0);
		// break;
		// case 3: // not exist
			// return array(0,0,0,1,0,0,0);
		// break;
		// case 4: // priest female
			// return array(0,0,0,1,0,0,0);
		// break;
		// case 5: // archer
			// return array(0,0,0,1,0,0,0);
		// break;
	// }
	return array(0,0,0,0,0,0,0);
}

function GetDefaultPartsDef($class_id)
{
	// switch($class_id)
	// {
		// case 1: //knight
			// return array(0,1,1,0,1,0,1); //head=1,body=6,leg=8,weapon=2,shield=4,quiver=5,arm=7
		// break;
		// case 2: //knight female
			// return array(0,1,1,0,1,0,1);
		// break;
		// case 3: // not exist
			// return array(0,1,1,0,1,0,1);
		// break;
		// case 4: // priest female
			// return array(0,1,1,0,1,0,1);
		// break;
		// case 5: // archer
			// return array(0,1,1,0,1,0,1);
		// break;
	// }
	return array(0,0,0,0,0,0,0);
}

function GetDefaultStat($class_id)
{
	switch($class_id)
	{
		case 1: //knight
			return array(11,8,9,8,14); //strength, intellect, agility, wisdom, health
		break;
		//case 2: //knight female
		//	return array(11,8,9,8,14);
		//break;
		//case 3: // priest male (not used)
		//	return array(7,14,10,12,7);
		//break;
		case 4: // priest female
			return array(7,14,10,12,7);
		break;
		case 5: // archer male
			return array(8,10,14,8,10);
		break;
	}
	return array(1,1,1,1,1,1,1);
}

function AlreadyExistsCharacterName($dbhandle,$character_name)
{
	$character_name = mysqli_real_escape_string($dbhandle,$character_name);
	
	
	$stmt = $dbhandle->prepare("select count(*) as cnt from character_list where character_name=?");	
	$stmt->bind_param("s", $character_name);
	$stmt->execute();
	$result = $stmt->get_result();
	$num = $result->fetch_assoc();
	
	mysqli_stmt_free_result($stmt);
	
	if($num["cnt"] > 0)
	{
		return true;
	}
	
	
	//if($query_result = mysqli_query($dbhandle, $strQuery)){
	//	$data = mysqli_fetch_row($query_result);
	//	if( $data[0] > 0 )
	//	{
	//		return true;
	//	}
	//}
	
	return false;
}




function CreateDefaultInvenItems($dbhandle, $character_uid, $class_id, $head, $body, $arm, $leg)
{
	
	$character_uid = mysqli_real_escape_string($dbhandle,$character_uid);
	$class_id = mysqli_real_escape_string($dbhandle,$class_id);
	
	
	//@todo: costom part 
	$returnParts = GetDefaultParts($class_id);
	$returnPartsAtt = GetDefaultPartsAtt($class_id);
	$returnPartsDef = GetDefaultPartsDef($class_id);
	
	if($returnParts[0] == 0 && $returnParts[1] ==0 && $returnParts[2] == 0 && $returnParts[3] ==0 && $returnParts[4] == 0 && $returnParts[5] ==0 && $returnParts[6] == 0)
		return false;
	
	
		
		
		
		//$data = mysqli_fetch_row($query_result);
		
		$insert_query = "INSERT INTO owned_item (character_uid, item_uid, count, is_equiped, parts_type,is_viewed) VALUES ";
		if($returnParts[0] != 0) $insert_query .="(".$character_uid.",".$returnParts[0].",1,1,1,1)";   // head
		if($returnParts[1] != 0) $insert_query .=",(".$character_uid.",".$returnParts[1].",1,1,6,1)";   // body
		if($returnParts[2] != 0) $insert_query .=",(".$character_uid.",".$returnParts[2].",1,1,8,1)";    // leg
		if($returnParts[3] != 0) $insert_query .=",(".$character_uid.",".$returnParts[3].",1,1,2,1)"; //weapon
		if($returnParts[4] != 0) $insert_query .=",(".$character_uid.",".$returnParts[4].",1,1,4,1)"; //shield
		if($returnParts[5] != 0) $insert_query .=",(".$character_uid.",".$returnParts[5].",1,1,5,1)"; //quiver
		if($returnParts[6] != 0) $insert_query .=",(".$character_uid.",".$returnParts[6].",1,1,7,1)"; /******** arm shouldn't be 0  *******/


		$result = @mysqli_query($dbhandle,$insert_query);
		if($result == 1)
		{
			
			if (CreateDefaultMail($dbhandle, $character_uid))
			{
				
				return true;
			}
			else
			{
				$strQuery = "delete from owned_item where character_uid=".$character_uid;
				@mysqli_query($dbhandle,$strQuery);
				$strQuery = "delete from character_list where character_uid=".$character_uid;
				@mysqli_query($dbhandle,$strQuery);
			}
		}
		else
		{
			$strQuery = "delete from character_list where character_uid=".$character_uid;
			@mysqli_query($dbhandle,$strQuery);
		}

	
	return false;		
}

function CreateDefaultMail($dbhandle, $char_id )
{
	
	$char_id = mysqli_real_escape_string($dbhandle,$char_id);
	

	$now = new DateTime();
	//$now->setTimezone(new DateTimeZone('Asia/Seoul'));
	$strTime =  date_format($now, "Y-m-d H:i:s");

	global $TEXT_CREATE_CHARACTER_GIFT_TITLE;
	global $TEXT_CREATE_CHARACTER_GIFT_CONTENT;

	$strQuery = "INSERT INTO mail_box_character (character_id, title, content, item_id, item_count, time_limit, time_send) VALUES (".$char_id.", '".$TEXT_CREATE_CHARACTER_GIFT_TITLE."', '".$TEXT_CREATE_CHARACTER_GIFT_CONTENT."', 50001, 1, 720, '".$strTime."')";
	//$strQuery .=",(".$char_id.", '".$TEXT_CREATE_CHARACTER_GIFT_TITLE."', '".$TEXT_CREATE_CHARACTER_GIFT_CONTENT."', 30050, 50, 168, '".$strTime."')";

	//Query Result
	if($result = @mysqli_query($dbhandle, $strQuery))
	{
		return true;
	}
	else
	{
		return false;
	}
	
	return false;			
}

function CreateCharacter($dbhandle, $user_id, $class_id, $character_name, $hair, $face, $head, $body, $arm, $leg, $stat_str, $stat_dex, $stat_int, $stat_wis, $stat_con)
{
	
	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;");
	
	
	$user_id = mysqli_real_escape_string($dbhandle,$user_id);
	
	$strQuery = "select count(*) from character_list where user_id='".$user_id."' and deleted=false";

	$return = "CREATE_FAILED";
	$responseMsg = "";
	//$error ="";
	//Query Result
	if($query_result = mysqli_query($dbhandle, $strQuery)){
		
		$data = mysqli_fetch_row($query_result);
		if( $data[0] >= 3 )
		{
			//echo "MAX_CHARACTER_ERROR";
			$return = "CREATE_FAILED";
			$responseMsg = "MAX_CHARACTER_ERROR";
			//return;
		}
		else
		{
			$returnParts = GetDefaultParts($class_id);
			
			$head = $returnParts[0];
			if($head <0)
				$head = 0;
			
			$body = $returnParts[1];
			if($body <0)
				$body =0;
			
			$leg = $returnParts[2];
			if($leg < 0)
				$leg =0;
			
			$weapon = $returnParts[3];
			if($weapon <0)
				$weapon = 0;
			
			$shield = $returnParts[4];
			if($shield <0)
				$shield = 0;
			
			$quiver = $returnParts[5];
			if($quiver <0)
				$quiver=0;
			
			$arm = $returnParts[6];
			if($arm <0)
				$arm = 0;
			
			
			
			$returnStats = GetDefaultStat($class_id);
		
		    $level = 1;
			$insert_query = "insert into character_list ( user_id,character_name,level,class_id,custom_hair_uid, custom_face_uid, parts_head_uid,parts_body_uid,parts_leg_uid,parts_weapon_uid,parts_shield_uid,parts_quiver_uid,parts_arm_uid, stat_strength, stat_intellect, stat_agility, stat_wisdom, stat_health) 
		         values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

			$stmt = $dbhandle->prepare($insert_query);
			$stmt->bind_param("ssiiiiiiiiiiiiiiii", $user_id, $character_name,$level,$class_id,$hair,$face,$head, $body, $leg, $weapon, $shield, $quiver, $arm, $returnStats[0], $returnStats[1], $returnStats[2], $returnStats[3], $returnStats[4]);
			$result = $stmt->execute();
			$stmt->close();
		

			//Query Result
			//$result = @mysqli_query($dbhandle,$insert_query);
			if($result == 1)
			{
				$return = "CREATE_OK" ;
				$responseMsg = "CREATE_OK";
				
				
				$character_uid = mysqli_insert_id($dbhandle);
				if(CreateDefaultInvenItems($dbhandle, $character_uid, $class_id, $head, $body, $arm, $leg) != true)
				{				
					 $return = "CREATE_FAILED";			
					 $responseMsg = "&CREATE_INVEN_FAILED";
				}
			
			}
			else
			{
			   $return = "CREATE_FAILED";
			   $responseMsg = "CREATE_FAILED (ErrNo:11)";
			   //$error = mysqli_error($dbhandle);
			}
			
			
			
			// don't use for upate/insert query, because these query result is true/false, not mysqli_result object
			//mysqli_free_result($result); 
			
			
		}
	}	
	
	EchoRespone($return,$responseMsg);
}

function EchoRespone($return, $responseMsg)
{
	$response = array('result'=>$return,'responseMsg'=>$responseMsg);
    
 
    $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 CreateCharacterQuery($user_id, $login_key, $class_id,$character_name,$hair,$face, $head, $body, $arm, $leg, $stat_str, $stat_dex, $stat_int, $stat_wis, $stat_con )
{
	$dbhandle = DB_Connect();
	//Select DB
	$db_selected = mysqli_select_db($dbhandle, DB_NAME)
	or die("Could not select db");
	
	
	
	if(!CheckLoginKey($dbhandle, $user_id, $login_key))
	{
		PrintLoginKeyError();
		return;
	}
	
	
	if(!CheckForbiddenName($character_name))
	{
		global $TEXT_ALREDY_EXSITS_NAME;
		
		$return = "CREATE_FAILED";
		$responseMsg = $TEXT_ALREDY_EXSITS_NAME;
		EchoRespone($return,$responseMsg);
	}
	else
	{
		if(AlreadyExistsCharacterName($dbhandle,$character_name) == true)
		{
			global $TEXT_ALREDY_EXSITS_NAME;
			
			$return = "CREATE_FAILED";
			$responseMsg = $TEXT_ALREDY_EXSITS_NAME;
			EchoRespone($return,$responseMsg);
		}
		else
		{
			
			CreateCharacter($dbhandle,$user_id,$class_id,$character_name,$hair, $face, $head, $body, $arm, $leg, $stat_str, $stat_dex, $stat_int, $stat_wis, $stat_con );
			
		}
		
	}
	
	
	
	mysqli_close($dbhandle);



	/*$response = array('result'=>$return,'responseMsg'=>$responseMsg);
    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($response);
	*/
}

$json = json_decode(file_get_contents('php://input'));
$user_id = $json->user_id;
$class_id = $json->class_id;
$character_name = $json->character_name;
$head = $json->head;
$hair = $json->hair;
$face = $json->face;
$body = $json->body;
$arm = $json->arm;
$leg = $json->leg;
$stat_str = $json->stat_str;
$stat_dex = $json->stat_dex;
$stat_int = $json->stat_int;
$stat_wis = $json->stat_wis;
$stat_con = $json->stat_con;
$platform = $json->platform;
$ticket = $json->ticket;
$login_key = $json->login_key;







if($_GET['lang'] == 'kr')
{
	include 'localization_kr.php';
}
else
{
	include 'localization_eng.php';
}

if (CheckTicket($platform, $user_id, $ticket) || $platform === 'unknown')
{	
	CreateCharacterQuery($user_id, $login_key, $class_id, $character_name, $hair, $face, $head, $body, $arm, $leg, $stat_str, $stat_dex, $stat_int, $stat_wis, $stat_con );
}
else 
{
	EchoRespone("CREATE_FAILED", "Authentication Failed");
}




?>