<?php

class D2ItemData {
	
	public $strings;

	public function uniqueItems($index, $doc = FALSE) {
		// This is where we get props for each item
		$sql = "SELECT * FROM uniqueitems WHERE enabled='1' AND `index`=?";

		$res = (PDO_FetchRow($sql, [$index]));

		/*
		 *
		 *
		 *
		 * Grag invfile code all 3 item tables wherever it is
		 *
		 *
		 *
		 *
		 *
		 *
		 */

		if (empty($res['invfile'])) {

			// if no invfile, get from other tables
			// try to get from armor, weapons, misc

			$sql = "SELECT invfile FROM armor WHERE code=?";
			$invfile[] = PDO_FetchRow($sql, [$res['code']]);

			$sql = "SELECT invfile FROM weapons WHERE code=?";
			$invfile[] = PDO_FetchRow($sql, [$res['code']]);

			$sql = "SELECT invfile FROM misc WHERE code=?";
			$invfile[] = PDO_FetchRow($sql, [$res['code']]);

			$invfile = array_filter($invfile);

			foreach ($invfile as $i) {
				$x[] = $i;
			}

			if (!empty($x[0])) {
				$x[0] = array_filter($x[0]);
			}
			$invClean = $x[0];
			if (!empty($invClean)) {
				$return = array_merge($res, $invClean);
			} else {
				$return = $res;
			}

			//$return = array_merge($res, $invClean);
		} else {
			$return = $res;
		}

		// var_dump($return);
		/*
		 *
		 *
		 *
		 *
		 *
		 *
		 * for all props for this unique item, get ISC strings

		 */

		$props = array_filter([
			"Prop1" => array_filter(
					["prop1" => $return['prop1'], "par1" => $return['par1'], "min1" => $return['min1'], "max1" => $return['max1']]
			),
			"Prop2" => array_filter(
					["prop2" => $return['prop2'], "par1" => $return['par2'], "min1" => $return['min2'], "max1" => $return['max2']]
			),
			"Prop3" => array_filter(
					["prop3" => $return['prop3'], "par1" => $return['par3'], "min1" => $return['min3'], "max1" => $return['max3']]
			),
			"Prop4" => array_filter(
					["prop4" => $return['prop4'], "par1" => $return['par4'], "min1" => $return['min4'], "max1" => $return['max4']]
			),
			"Prop5" => array_filter(
					["prop5" => $return['prop5'], "par1" => $return['par5'], "min1" => $return['min5'], "max1" => $return['max5']]
			),
			"Prop6" => array_filter(
					["prop6" => $return['prop6'], "par1" => $return['par6'], "min1" => $return['min6'], "max1" => $return['max6']]
			),
			"Prop7" => array_filter(
					["prop7" => $return['prop7'], "par1" => $return['par7'], "min1" => $return['min7'], "max1" => $return['max7']]
			),
			"Prop8" => array_filter(
					["prop8" => $return['prop8'], "par1" => $return['par8'], "min1" => $return['min8'], "max1" => $return['max8']]
			),
			"Prop9" => array_filter(
					["prop9" => $return['prop9'], "par1" => $return['par9'], "min1" => $return['min9'], "max1" => $return['max9']]
			),
			"Prop10" => array_filter(
					["prop10" => $return['prop10'], "par1" => $return['par10'], "min1" => $return['min10'], "max1" => $return['max10']]
			)
		]);

		// need par, min, max value for each prop
		//
		//
		// ( Also need func1 and val1 for each prop )

		//
		// for each prop, get stat
		$counter = 1;
		foreach ($props as $key => $val) {
			// val = Prop1,Prop2 etc.
			// for each propr, get all 7 stats in ISC
			
			// for now only get stat1, and for else, use dgrp
			
			$sql = "SELECT stat1 FROM properties WHERE code = ?";
			$props[$key]['stat'] = PDO_FetchRow($sql, [$val['prop' . $counter]]);

			if (!empty($props[$key]['stat'])) {
				$props[$key]['stat'] = array_filter($props[$key]['stat']);
			}

			$counter++;
		}


		//ddump($props);

		$counter = 1;
		//each stat now goes into getIscStrings
		foreach ($props as $k => $v) {
			//ddump($v);
			$props[$k]['desc'] = $this->getIscStrings($v['prop' . $counter]);
			$counter++;
		}

		// SELECT * FROM strings WHERE `Key`='ModStr3a' returns always Amazon Skills
		// todo: put values in params, so I can get generated string for that prop

		$counter = 1;
		foreach ($props as $k => $v) { // for each property Prop1 Prop2
//			$sql = "SELECT val$counter,func$counter FROM `properties` WHERE `code`=\"{$return['prop' . $counter]}\"";
//			$funcval = PDO_FetchRow($sql);
//
//			var_dump($funcval);
			$params = [
				'string1' => $v['desc']['string1'],
				'string2' => $v['desc']['string2'],
				'gstring1' => $v['desc']['gstring1'],
				'gstring2' => $v['desc']['gstring2'],				
				'descfunc' => $v['desc']['descfunc'],
				'descval' => $v['desc']['descval'],
				'dgrp' => $v['desc']['dgrp'],
				'dgrpfunc' => $v['desc']['dgrpfunc'],
				'dgrpval' => $v['desc']['dgrpval'],				
				"prop" => $return['prop' . $counter],
				"par" => $return['par' . $counter],
				"min" => $return['min' . $counter],
				"max" => $return['max' . $counter],
					// "val1" => $funcval['val1'],
					// "func1" => $funcval['func1']
					// 'item' => $return
			];

			/*
			 * getDesc should process string1, not file guide copy pasta
			 *
			 */
			if (!empty($v['desc'])) {
				require_once 'D2ItemDesc.php';
				$idesc = new D2ItemDesc();
				$props[$k]['string'][] = ($idesc->getDesc($params));
			}
			$counter++;
		}

		$return['props'] = $props;

		$sqlArmor = "SELECT * FROM armor WHERE code=?";
		$sqlMisc = "SELECT * FROM misc WHERE code=?";
		$sqlWeapons = "SELECT * FROM weapons WHERE code=?";

		$baseItemInfo = PDO_FetchRow($sqlArmor, [$res['code']]);
		$uTable = "armor";

		if (empty($baseItemInfo)) {
			$baseItemInfo = PDO_FetchRow($sqlMisc, [$res['code']]);
		}
		if (empty($baseItemInfo)) {
			$baseItemInfo = PDO_FetchRow($sqlWeapons, [$res['code']]);
		}

		$return['baseItemInfo'] = $baseItemInfo;

		if (!empty($baseItemInfo)) {
			$return['baseItemInfo'] = array_filter($baseItemInfo);
		}

		if (!$doc) {
			header('Content-Type: application/json');
			return json_encode($return, JSON_INVALID_UTF8_IGNORE | JSON_PRETTY_PRINT);
		} else {
			return $return;
		}
	}

//	function getIscStringsX($iscStat) {
////		$sql = "
////SELECT s1.String as string1, s2.String as string2, descfunc, descval
////        FROM itemstatcost as i
////        LEFT JOIN strings AS `s1` ON `i`.descstrpos = `s1`.`Key`
////        LEFT JOIN strings AS `s2` ON `i`.DescStr2 = `s2`.`Key`
////        WHERE `Stat` = '$iscStat'
////";
//
//
//		$sql = "SELECT String as string1
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
//		WHERE `Stat` = '$iscStat'";
//		$string1 = PDO_FetchOne($sql);
//
//		$sql = "SELECT String as string2
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.DescStr2 = `s`.`Key`
//		WHERE `Stat` = '$iscStat'";
//		$string2 = PDO_FetchOne($sql);
//
//		$sql = "SELECT descfunc
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
//		WHERE `Stat` = '$iscStat'";
//		$descfunc = PDO_FetchOne($sql);
//
//		$sql = "SELECT descval
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
//		WHERE `Stat` = '$iscStat'";
//		$descval = PDO_FetchOne($sql);
//
//
//		//ddump();
//
//		return ["string1"=>$string1, "string2"=>$string2, "descfunc"=>$descfunc, "descval"=>$descval];
//	}
//
//	function getIscStringsXXX($iscStat) {
//		$sql = "
//SELECT
//	(
//		SELECT String
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
//		WHERE `Stat` = '$iscStat'
//	)
//AS string1,
//	(
//		SELECT String
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.DescStr2 = `s`.`Key`
//		WHERE `Stat` = '$iscStat'
//	)
//AS string2,
//(
//		SELECT descfunc
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
//		WHERE `Stat` = '$iscStat'
//	)
//AS descfunc,
//(
//		SELECT descval
//		FROM itemstatcost as i
//		LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
//		WHERE `Stat` = '$iscStat'
//	)
//AS descval
//";
//
//
//		return PDO_FetchRow($sql);
//	}


	public function getIscStrings($iscStat) {

		
		if (empty($this->strings)){
			$this->getStrings();
		}
		
		return ($this->strings[$iscStat]);
		
		
		
	}

	public function getStrings() {
		$sql = "
				SELECT p.`code` as prop,
					p.stat1,
					i.descstrpos,
					i.descstr2,
					i.descfunc,
					i.descval,
					i.dgrp,
					i.dgrpfunc,
					i.dgrpval,
					i.dgrpstrpos,
					i.dgrpstrneg,
					s1.String as string1,
					s2.String as string2,
					s3.String as gstring1,
					s4.String as gstring2
				FROM properties as p

				LEFT JOIN itemstatcost as i
				ON p.stat1 = i.Stat

				LEFT JOIN strings as s1
				ON i.descstrpos = s1.Key
				LEFT JOIN strings as s2
				ON i.descstr2 = s2.Key

				LEFT JOIN strings as s3
				ON i.dgrpstrpos = s3.Key
				LEFT JOIN strings as s4
				ON i.dgrpstr2= s4.Key
				";

		// where p.code = iscstat				
		
		$strings = PDO_FetchAll($sql);
		
		
		//var_dump($strings);
		foreach($strings as $k => $v){
			$this->strings[$v['prop']] = $v;
		}		
	}

}