<?php
	/* REQUEST HANDLING */
	
	// Handle navigation request & update session.
	if(isset($_POST['set-navigation'])) {
		$_SESSION[_sid]['view'] = $_POST['set-navigation'];
		echo $_SESSION[_sid]['view'];
	}

	// Get item data with quick search.
	if(isset($_POST['quick-item-search'])) {
		echo json_encode(quick_item_search($_POST['quick-item-search']));
	}


	// Get item to be edited.
	if(isset($_POST['get-edit-item'])) {
		$item = get_item_data($_POST['get-edit-item']);
		include('inc/forms/form.edit.item.php');
		echo '
		<div class="row"><div class="col-lg-12"><h1><hr></hr></h1></div></div>
		<div class="row">
			'.get_item_edit_form($item).'
		</div>
		
		
		
		
		<p class="display-4 animated flipInX" style="font-size:22pt!important;"><i class="fad fa-debug text-danger"></i> Debug Output</p>
		<pre class="text-left panel-tag">'.print_r($item,1).'</pre>
		<script>
			$(\'#item-editor-header-label\').empty().append(\'<span class="inline animated bounceIn"><i class="fad fa-caret-right"></i> '.$item['name'].'</span>\');
			$(\'#item-editor-header-label\').switchClass("btn-info","btn-primary");
		</script>';
	}
	
	
	// Get item icons by selected category.
	if(isset($_POST['get-item-icons'])) {
		require('inc/json.item.icons.php');
		echo get_icon_picker($itemIcons, 'icons', $_POST['get-item-icons'], (isset($_POST['page']) ? $_POST['page']:1));
	}
	
	/* GET FUNCTIONS */
	
	function get_icon_picker($icons, $type = 'icons', $category = 'Adornment', $page = 1, $limit = 133,  $return = NULL) {
		$pass = 0;
		if($type == 'categories') {
			$return .= '
			<button class="icopicker-category btn btn-sm btn-block btn-default" data-category="all">All</button>';
			foreach($icons as $c => $i) {
				$return .= '
				<button class="icopicker-category btn btn-sm btn-block btn-default" data-category="'.$c.'">
					'.$c.'
				</button>';
				$pass++;
			}
			$return .= '<script>setTimeout(function() { $(\'.icopicker-category[data-category="Adornment"]\').trigger(\'click\'); },500); </script>';
		} else {
			$from = ($limit*$page)-$limit;
			$to = ($limit*$page);
			$pass++;
			
			if($category == 'all') {
				$ico = [];
				foreach($icons as $c => $v) {
					foreach($v['icons'] as $i) {
						if(!in_array($i, $ico)) {
							$ico[] = $i;
						}
					}
				}
			} else {
				$ico = $icons[$category]['icons'];					
			}
			$pass = 0;
			foreach($ico as $k => $i) {
				if(($pass >= $from) && ($pass+1 <= $to)) {
					$return .= '<div class="ico-picker-i ico-unloaded" data-icon-id="'.$i.'"><span class="ico-picker-loader"><i class="fad fa-circle-notch fa-spin fast-spin"></i></div>';
				}
				$pass++;
			}
		}
		$pagination = ($type == 'icons' ? '<div class="ico-picker-pagination">'.ico_pagination($category, $page, $limit, count($ico)).'</div>':NULL);
		return $pagination.$return;
	}
	
	//Generates pagination for icons.
	function ico_pagination($category, $p, $limit, $count, $return = NULL) {
		$return .= '<button class="btn btn-xs btn-default '.($p == 1 ? 'hidden':NULL).'" data-category="'.$category.'"><i class="fad fa-arrow-from-right"></i></button>';
		$page_count = ceil($count/$limit);
		if($page_count > 1) {
			if(($p-5) > 1) {
				$return .= '<span class="ico-picker-ellipsis"><i class="fas fa-ellipsis-h-alt"></i></span>';
			}
			for ($k = 1 ; $k <= $page_count; $k++){
				if(($k >= ($p-5)) && ($k <= ($p+5))) {
					$return .= '
					<button class="btn btn-xs ico-picker-page '.($p == $k ? 'btn-success':'btn-default').'" '.($p == $k ? 'disabled="disabled"':NULL).' data-page="'.$k.'" data-category="'.$category.'">
					'.$k.'
					</button>';
				}
			}
			if(($p+5) < $page_count) {
				$return .= '<span class="ico-picker-ellipsis"><i class="fas fa-ellipsis-h-alt"></i></span>';
			}
		} else {
			$return .= '
			<button class="btn btn-xs ico-picker-page btn-success" data-page="'.$p.'" data-category="'.$category.'" disabled="disabled">
			'.$p.'
			</button>';
		}
		$return .= '
		<button class="btn btn-xs btn-default  ico-picker-page" data-category="'.$category.'" '.($p == $page_count ? 'disabled="disabled"':NULL).'>
			<i class="fad fa-arrow-from-left"></i>
		</button>';
		return $return;
	}
	
	
	//Global function to build editable inputs. (WIP)
	function build_edit_input($e, $return = NULL) {
		
		$return = '
			<div class="form-group">
				<label class="form-label '.($e['show-label'] ? NULL:'hidden').'" for="basic-addon1">'.$e['title'].'</label>
				<div class="input-group">
					<div class="input-group-prepend">
						<span class="input-group-text strong">'.($e['icon'] ? '<i class="'.$e['icon'].'"></i>':NULL).'&nbsp;'.$e['title'].'</span>
					</div>
					<input
						type="text"
						class="form-control '.$e['class'].'"
						data-field="'.$e['field'].'"
						value="'.$e['value'].'"
						placeholder="'.($e['placeholder'] ? $e['placeholder']:NULL).'"
						aria-label="'.($e['aria'] ? $e['aria']:NULL).'"
						aria-describedby="'.$e['field'].'"
					/>
				</div>
				<span class="help-block">'.($e['desc'] ? $e['desc']:'&nbsp;').'</span>
			</div>';
		
		return $return;
	}
	
	
	
	
	// Builds item edit form inputs & form.
	function get_item_edit_form($item, $return = NULL) {
		$pass = 0;
		$return .= '
		<div class="col-2 text-center">
			<img class="edit-item-ico vm" src="img/eq2/items/'.$item['icon'].'.png"/>
		</div>';
		foreach($item as $k => $v) {
			$return .= '
			<div class="col-'.($k == 'id' ? '2':'4').'">
				<div class="form-group">
					<label class="form-label hidden" for="basic-addon1">'.$k.'</label>
					<div class="input-group">
						<div class="input-group-prepend">
							<span class="input-group-text strong">'.$k.'</span>
						</div>
						<input type="text" class="form-control item-edit-input" value="'.$v.'" placeholder="'.$k.'" aria-label="'.$k.'" aria-describedby="'.$k.'">
					</div>
					<span class="help-block">&nbsp;</span>
				</div>
			</div>';
		}
		return $return;
	}
	
	// Get Item Data
	function get_item_data($id, $return = []) {
		global $world;
		$query = '
		SELECT
			i.`id`,
			i.`name`,
			i.`item_type`,
			i.`icon`,
			i.`count`,
			i.`tier`,
			i.`skill_id_req`,
			i.`skill_id_req2`,
			i.`skill_min`,
			i.`weight`,
			i.`description`,
			i.`show_name`,
			i.`attuneable`,
			i.`artifact`,
			i.`lore`,
			i.`temporary`,
			i.`notrade`,
			i.`novalue`,
			i.`nozone`,
			i.`nodestroy`,
			i.`crafted`,
			i.`good_only`,
			i.`evil_only`,
			i.`stacklore`,
			i.`lore_equip`,
			i.`flags_16384`,
			i.`flags_32768`,
			i.`ornate`,
			i.`heirloom`,
			i.`appearance_only`,
			i.`unlocked`,
			i.`reforged`,
			i.`norepair`,
			i.`etheral`,
			i.`refined`,
			i.`flags2_256`,
			i.`usable`,
			i.`slots`,
			i.`set_name`,
			i.`sell_price`,
			i.`sell_status_amount`,
			i.`stack_count`,
			i.`collectable`,
			i.`adornment_slot1`,
			i.`adornment_slot2`,
			i.`adornment_slot3`,
			i.`adornment_slot4`,
			i.`adornment_slot5`,
			i.`adornment_slot6`,
			i.`adornment_description`,
			i.`offers_quest_id`,
			i.`soe_autoquest_id`,
			i.`part_of_quest_id`,
			i.`quest_unknown`,
			i.`max_charges`,
			i.`display_charges`,
			i.`recommended_level`,
			i.`adventure_default_level`,
			i.`tradeskill_default_level`,
			i.`adventure_classes`,
			i.`tradeskill_classes`,
			i.`soe_item_id`,
			i.`soe_item_crc`,
			i.`lua_script`,
			i.`harvest`
		FROM `items` as `i`
		WHERE `i`.`id` = '.addslashes($id);
		$stmt = $world->prepare($query);
		$stmt->execute();
		$row = $stmt->fetch(PDO::FETCH_ASSOC);
		$return = $row;
		return $return;
	}
	
	// Quick Item Search
	function quick_item_search($s, $limit = 100, $page = 0, $return = []) {
		global $world;
		$return = [
			'found'	=> 0,
			'count' => 0,
			'rows' => [],
			'limit' => $limit,
			'page' => $page
		];
		$query = '
		SELECT
			SQL_CALC_FOUND_ROWS
			i.`id`,
			i.`name`,
			i.`item_type`,
			i.`icon`
		FROM `items` as `i`
		WHERE i.`id` = \''.addslashes($s).'\'
		OR i.`name` LIKE \'%'.addslashes(str_replace(' ', '%%',$s)).'%\'
		OR LOWER(i.`item_type`) = LOWER(\''.addslashes($s).'\')
		LIMIT '.$limit;
		//error_log($query,1);
		$stmt = $world->prepare($query);
		$stmt->execute();
		$rc = $stmt->rowCount();
		if($rc > 0) {
			$return['found'] = get_found_count();
			$return['count'] = $rc;
			while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
				$return['rows'][] = $row;
			}
		}
		return $return;		
	}
	
	//Returns count of rows found (if LIMIT had not been used).
	//Note: Requires SQL_CALC_FOUND_ROWS after SELECT.
	function get_found_count() {
		global $world;
		$query = 'SELECT FOUND_ROWS() as `found`;';
		$stmt = $world->prepare($query);
		$stmt->execute();
		$row = $stmt->fetch(PDO::FETCH_ASSOC);
		return $row['found'];
	}
	
	//Returns count of characters.
	function get_character_count($return = 0) {
		global $world;
		$query = 'SELECT count(DISTINCT `id`) as `count` FROM `characters`';
		$stmt = $world->prepare($query);
		$stmt->execute();
		$row = $stmt->fetch(PDO::FETCH_ASSOC);
		$return = $row['count'];
		return $return;
	}

	//Get World Information.
	function get_world_info($world_name = NULL, $return = []) {
		global $_db, $login;
		$world_name = ($world_name == NULL ? _world:$world_name);
		$query = '
		SELECT
			w.id,
			w.name,
			w.disabled,
			w.account,
			w.description,
			w.password,
			w.serverop,
			w.greenname,
			w.note,
			w.ip_address,
			w.login_version,
			DATE_FORMAT(FROM_UNIXTIME(w.lastseen), "%m/%d/%y %h:%i %p") AS `lastseen`
		FROM login_worldservers AS w
		WHERE w.name = \''.$world_name.'\'';
		$stmt = $login->prepare($query);
		$stmt->execute();
		$row = $stmt->fetch(PDO::FETCH_ASSOC);
		$return = $row;
		return $return;
	}

	//Pulls variable data from world db.
	function get_world_variables($return = []) {
		global $world;
		
		$query = '
		SELECT
			v.variable_name,
			v.variable_value,
			v.comment
		FROM variables as v';
		$stmt = $world->prepare($query);
		$stmt->execute();
		
		while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
			$return[$row['variable_name']] = [
				'value'	=>	$row['variable_value'],
				'desc'	=>	$row['comment']
			];	
		}
		return $return;
	}




	/* UTILITY FUNCTIONS */



	// Loads HTML output for left navigation menu.
	function get_nav_menu($return = NULL) {
		global $_modules, $_SESSION;
		
		$active = $_SESSION[_sid]['view'];
		foreach($_modules as $k => $m) {
			$access = !empty(array_intersect($_SESSION[_sid]['user']['access'], $m['access']));
			if($access) {
				if($m['type'] == 'module') {
					$return .= '
					<li class="'.($active == $k ? 'active':NULL).' eq-nav-link" data-module="'.$k.'">
						<a class="waves-effect waves-themed" href="#" title="'.$m['desc'].'">
							'.($m['icon'] ? '<i class="'.$m['icon'].'"></i>':NULL).'
							<span class="nav-link-text" data-il8n="nav.ui_components">'.$m['title'].'</span>
						</a>
					</li>';
				} else if($m['type'] == 'category') {
					$return .= '
					<li class="nav-title">
						'.($m['icon'] ? '<i class="'.$m['icon'].'"></i>':NULL).' '.$m['title'].'
					</li>';
				}
			}
		}
		return $return;
	}









?>