<?php
	/* (C) DairyWindow 2012-2017 */

	$needle  = array("'", ' ', '<sub>', '</sub>', '<sup>', '</sup>', '<', '>', '"');
	$needle2 = array("'", '_');

	if(isset($_GET['from']) && $_GET['from']!='') $from = $_GET['from'];
	else $from = date('Y-m-d', strtotime('last week'));
	if(isset($_GET['to']) && $_GET['to']!='') $to = $_GET['to'];
	else $to = date('Y-m-d', strtotime('yesterday'));

	require 'inc/connect.php';
	require 'inc/texttonumber.php';
	//require 'inc/numbertotext.php';
	require 'inc/getDataRecursive.php';

	$title = 'Production graphs';
	require 'inc/head.php';
	$menu = 'graphs';
	require 'inc/menu.php';

	if($debug) showdebug();

	if(isset($_GET['from'])) $datefrom = date('Y-m-d', strtotime($_GET['from']));
	else $datefrom = date('Y-m-d', strtotime('last week'));

	if(isset($_GET['to'])) $dateto = date('Y-m-d', strtotime($_GET['to']));
	else $dateto = date('Y-m-d', strtotime('yesterday'));

	if($datefrom > $dateto) $datefrom = $dateto;

	$lineColors = array('#0b62a4', '#7A92A3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed',
	                    '#62a40b', '#92A37A', '#a74d4d', '#d8f8af', '#c240ed', '#4b4bcb', '#40ed94',
                      '#a40b62', '#A37A92', '#4d4da7', '#f8afd8', '#40edc2', '#4bcb4b', '#ed9440'); // copied from morris.js

?>

	<div id="topDIV" class="page-header">
		<h1 class="text-center"><?php echo $title; ?></h1>
	</div>

	<div class="container-fluid" >
		<div class="col-md-3 hidden-print" role="complementary">
			<form method="get" id="tform" >
				<div class="control-group">
					<div class="form-group">
						<label for="fieldID">Field</label>
						<?php
							$sql='
								# get fields for left column
								Select
									dw_sn_page.pageText,
									dw_sn_field.fieldID,
									dw_sn_field.fieldTitle
								From
									dw_sn_field Inner Join
									dw_sn_page
										On dw_sn_field.fieldPage = dw_sn_page.pageID
								Where
									dw_sn_page.pageSite     = ? And
									dw_sn_page.pageActive   = 1 And
									dw_sn_field.fieldActive = 1 And
									(dw_sn_field.fieldType  = 1 Or
									 dw_sn_field.fieldType  = 6 Or
									 dw_sn_field.fieldType  = 7)
								Order By
									dw_sn_page.pageOrder,
									dw_sn_page.pageText,
									dw_sn_field.fieldOrder,
									dw_sn_field.fieldTitle
							';
							if(!$qry = mysqli_prepared_query($link, $sql, 'i', array($_SESSION['userSite']), __FILE__, __LINE__)) reporterror(get_error(), $sql, $_SERVER['REQUEST_URI'], __FILE__, __LINE__);
							echo '<select name="fieldID[]" id="fieldID" class="form-control" size="10" multiple >';
								$group = array();
								foreach($qry as $row){
									$group[$row['pageText']][] = $row;
								}
								foreach ($group as $key => $values) {
									echo '<optgroup label="'.$key.'">';
									foreach ($values as $value) {
										echo '<option value="'.$value['fieldID'].'"';
											if(isset($_GET['fieldID']) && is_string($value['fieldID']) && is_array($_GET['fieldID']) && in_array($value['fieldID'], $_GET['fieldID'])) echo ' selected';
											echo '>'.$value['fieldTitle'];
											if($debug) echo ' ['.$value['fieldID'].']';
										echo '</option>';
									}
									echo '</optgroup>';
								}
								echo '</select>';
							?>
					</div>
					<div class="form-group">
						<label for="from">From</label>
						<input name="from" id="from" class="form-control" type="date" value="<?php echo $from; ?>" >
					</div>
					<div class="form-group">
						<label for="to">To</label>
						<input name="to" id="to" class="form-control" type="date" value="<?php echo $to; ?>" >
					</div>
					<div class="form-group">
						<input name="btnGo" class="btn btn-primary" type="submit" value="Refresh" >
						<a class="btn btn-default" role="button" onclick="window.print();"><span class="glyphicon glyphicon-print" aria-hidden="true"></span>&nbsp;Print</a>
					</div>
				</div>
				<?php if($debug) echo '<input type="hidden" name="debug" value="true">'; ?>
			</form>
		</div>
		<div class="col-md-9" role="main">
			<div class="visible-print-inline-block text-center">From <?php echo date('d/m/Y',strtotime($from)); ?> To <?php echo date('d/m/Y',strtotime($to)); ?></div>
			<div id="trend" class="container center-text"></div>
		</div>
	</div>

	<?php
		$table = '';
		if(isset($_GET['btnGo'])){ ?>

			<script src="js/trends.js?v=2.1"><!-- Trend JS --></script>
			<script src="js/raphael-min.js?v=2.1"><!-- HTML5 canvas drawing API --></script>
			<script src="js/morris.min.js?v=2.1"><!-- Chart API http://morrisjs.github.io/morris.js --></script>

			<script>

				var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];

				new Morris.Line({
					// ID of the element in which to draw the chart.
					element: "trend",
					// Chart data records -- each entry in this array corresponds to a point on the chart.
					data: [<?php
						$ykeys  = array();
						$labels = array();
						$table  = '';

						if(!isset($_GET['fieldID']) || $_GET['fieldID']=='' || !is_array($_GET['fieldID'])){
							$fieldIDs = ''; //just to make it work
						}else{
							$fieldIDs = 'And (dw_sn_field.fieldID = ';
							foreach($_GET['fieldID'] as $fieldID){
								$fieldIDs .= clean($fieldID) . ' Or dw_sn_field.fieldID = ';
							}
							if(substr($fieldIDs, -26) == ' Or dw_sn_field.fieldID = ') $fieldIDs = substr($fieldIDs, 0, strlen($fieldIDs)-26); //remove the last bit
							$fieldIDs .= ')';
						}

						$sql='
							Select
								dw_sn_value.valueDay
							From
								dw_sn_field Inner Join
								dw_sn_value On dw_sn_value.valueField = dw_sn_field.fieldID
							Where
								dw_sn_value.valueDay >= ? And
								dw_sn_value.valueDay <= ?
							Group by
								dw_sn_value.valueDay
							Order By
								dw_sn_value.valueDay
						';
						if(!$date_qry = mysqli_prepared_query($link, $sql, 'ss', array($from, $to), __FILE__, __LINE__)) reporterror(get_error(), $sql, $_SERVER['REQUEST_URI'], __FILE__, __LINE__);
						foreach($date_qry as $date_row){
							$table .= '<tr>';
							echo '{ date: "'.$date_row['valueDay'].'", ';
							$table .= '<td>'.date('d/m/Y',strtotime($date_row['valueDay'])).'</td>';
							$sql='
								Select
									dw_sn_field.fieldTitle,
									dw_sn_field.fieldID,
									dw_sn_value.valueValue
								From
									dw_sn_field Inner Join
									dw_sn_value
										On dw_sn_value.valueField = dw_sn_field.fieldID
								Where
									dw_sn_value.valueDay = ?
									'.$fieldIDs.'
								Order By
									dw_sn_field.fieldOrder
							';
							if(!$value_qry = mysqli_prepared_query($link, $sql, 's', array($date_row['valueDay']), __FILE__, __LINE__)) reporterror(get_error(), $sql, $_SERVER['REQUEST_URI'], __FILE__, __LINE__);
							//while($value_row = mysqli_fetch_assoc($value_qry)) {
							foreach($value_qry as $value_row){
								if($value_row['valueValue']=='' || $value_row['valueValue']==null){
									$newValue = floatval(
										getDataRecursive(
											$value_row['fieldID'],
											$date_row['valueDay']
										)
									);
								}else{
									$newValue = $value_row['valueValue'];
								}
								$title = '"'.str_replace($needle,'_', $value_row['fieldTitle']).'"';
								echo $title.': '.$newValue.', ';
								if(!in_array($title, $ykeys)) $ykeys[] = $title; //add to ykeys array if not there already
								$table .= '<td>'.$newValue.'</td>';
							}
							echo "}, \n";
							$table .= '</tr>';
						}
					?>],
					// The name of the data record attribute that contains x-values.
					xkey: "date",
					// A list of names of data record attributes that contain y-values.
					ykeys: [<?php foreach($ykeys as $ykey){ echo $ykey.', '; } ?>],
					xlabels: "day",
					// Labels for the ykeys -- will be displayed when you hover over the chart.
					labels: [<?php foreach($ykeys as $ykey){ echo str_replace('_', ' ', $ykey).', '; } ?>],

					xLabelFormat: function(day){
						//return (1+new Date(day).getDay()) + " " + monthNames[new Date(day).getMonth()] + " " + (1+new Date(day).getFullYear());
						var d = new Date(day);
						return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear();
					},

					hideHover: "auto"
				});

			</script>

			<div class="container">
				<table class="table table-striped"><?php
					echo '<tr><th>Date</th>';
					$color = 0;
					foreach($ykeys as $ykey){
						if($ykey!='' && $ykey!=null) echo '<th style="color: '.$lineColors[$color].'">'.str_replace($needle2,' ', $ykey).'</th>';
						$color++;
						if($color>=count($lineColors)) $color = 0; //loop around color array
						//TODO: Use modulus instead
					}
					echo '</tr>'.$table;
				?></table>
			</div>
		<?php
		}
	echo '
		<script>
			dropdown(fieldID);
		</script>
	';
	require 'inc/footer.php'; ?>
