<?php
include 'common.php';
include 'server_exchange_common.php';

function DeleteOwnedItem($dbhandle, $owned_item_uid, $character_uid)
{
	$stmt = $dbhandle->prepare("DELETE FROM owned_item WHERE owned_item_uid=? AND character_uid=?");
	$stmt->bind_param("ii",  $owned_item_uid, $character_uid);
	$result = $stmt->execute();
	$stmt->close();
	
	if($result)
		return true;
	return false;
}
function DecreaseOwnedItem($dbhandle, $owned_item_uid, $character_uid, $item_count)
{
	$stmt = $dbhandle->prepare("UPDATE owned_item set count=count-? WHERE owned_item_uid=? AND character_uid=?");
	$stmt->bind_param("iii", $item_count, $owned_item_uid, $character_uid);
	$result = $stmt->execute();
	$stmt->close();
	
	if($result)
	{
		return true;
	}
	return false;
}
function InsertExchangeItem($dbhandle, $character_uid, $item_uid, $count, $price, $parts_tpye, $enchant, $is_viewed, $optType1, $optValue1, $optType2, $optValue2, $optType3, $optValue3, $optType4, $optValue4, $durability, $created_time)
{
	$now = new DateTime('now', new DateTimeZone('UTC'));
	$strTime =  date_format($now, "Y-m-d H:i:s");

	$stmt = $dbhandle->prepare("INSERT INTO exchange_item (owner_uid, item_uid, count, price, parts_type, enchant, is_viewed, optType1, optValue1, optType2, optValue2, optType3, optValue3, optType4, optValue4, durability, created_time, register_date, is_cancel) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0)");
	$stmt->bind_param("iiiiiiisdsdsdsdiss", $character_uid, $item_uid, $count, $price, $parts_tpye, $enchant, $is_viewed, $optType1, $optValue1, $optType2, $optValue2, $optType3, $optValue3, $optType4, $optValue4, $durability, $created_time, $strTime);
	$result = $stmt->execute();
	$stmt->close();

	if ($result)
		return true;
	return false;
}

function SellExchangeItem($account_id, $character_uid, $login_key, $owned_item_uid, $item_count, $total_price, $gold_price)
{
	$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;
	}

	$return = "SELL_EXCHANGE_ITEM_FAILED";
	$error = "";

	if (CheckExchangeIsMaintenance($dbhandle))
	{
		$return = "EXCHANGE_UNDER_MAINTENANCE";
		$error = "";
	}
	else
	{
		//owned item 확인
		//골드소모
		//count를 비교해서 owned item 삭제 or count 줄이기
		//exchange_item 생성

		$stmt = $dbhandle->prepare("SELECT * FROM owned_item WHERE owned_item_uid=? AND character_uid=?");
		$stmt->bind_param("ii", $owned_item_uid, $character_uid);
		$stmt->execute();
		$result = $stmt->get_result();

		if ($result)
		{
			if($row = $result->fetch_assoc())
			{
				mysqli_stmt_free_result($stmt);
				

				if (_ConsumeGold($dbhandle,$account_id, $character_uid, $gold_price))
				{
					$result_delete_owned_item = true;
					if ($item_count < $row['count'])
					{
						//owned_item 의 count 줄이기
						if (!DecreaseOwnedItem($dbhandle, $owned_item_uid, $character_uid, $item_count))
						{
							$return = "DECREASE_OWNED_ITEM_FAIL";
							$error = "";
							$result_delete_owned_item = false;
						}
					}
					else
					{
						//owned_item 삭제
						if (!DeleteOwnedItem($dbhandle, $owned_item_uid, $character_uid))
						{
							$return = "DELETE_OWNED_ITEM_FAIL";
							$error = "";
							$result_delete_owned_item = false;
						}
					}

					if ($result_delete_owned_item)
					{
						$sellResult = InsertExchangeItem($dbhandle, $character_uid, $row['item_uid'], $item_count, $total_price, $row['parts_type'], $row['enchant'], $row['is_viewed'],
						$row['optType1'], $row['optValue1'], $row['optType2'], $row['optValue2'], $row['optType3'], $row['optValue3'], $row['optType4'], $row['optValue4'], $row['durability'], $row['created_time']);
						if ($sellResult)
						{
							$return = "SELL_EXCHANGE_ITEM_OK";
							$error = "";
						}
						else
						{
							$return = "INSERT_EXCHANGE_ITEM_FAIL";
							$error = "";
						}
					}
					
				}
				else
				{
					$return = "NOT_ENOUGHT_GOLD";
					$error = "";
				}
			}
			else
			{
				$return = "NOT_EXIST_OWNED_ITEM";
				$error = "";
			}
		}
		else
		{
			$return = "DB_ERROR";
			$error = mysqli_error($dbhandle);
		}
	}

	$response = array('result'=>$return,'error'=>$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($response);
		
	mysqli_close($dbhandle);
}

$account_id = $_GET['account_id'];
$character_uid = $_GET['character_uid'];
$login_key = $_GET['login_key'];
$owned_item_uid = $_GET['owned_item_uid'];
$item_count = $_GET['item_count'];
$total_price = $_GET['total_price'];
$gold_price = $_GET['gold_price'];

if(CheckValidatedServerIP())
{
	SellExchangeItem($account_id, $character_uid, $login_key, $owned_item_uid, $item_count, $total_price, $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	));
}

?>