<?php 


// This script fetches how many people, for every subcategory, have answered a given score
// and spits out a json with an array of subcategory ID, subcategory name, score and count

// 	require_once 'processes/config.php';
	require_once 'processes/dbh.inc.php';
// 	require_once 'processes/checkLogin.php';



$experienceID = mysqli_real_escape_string($connection, trim($_POST['experienceID'])); // 26
$momentID = mysqli_real_escape_string($connection, trim($_POST['momentID'])); // 196
$studentID = mysqli_real_escape_string($connection, trim($_POST['studentID']));



// Count the number of subcategories for the experience
$sqlCountSubcategories = "SELECT DISTINCT S.id
						FROM subcategory AS S
						JOIN question as Q
						JOIN subquestionnair_question AS SQ
						JOIN experience_subquestionnair AS ES
							WHERE S.id = Q.id_subcategory
							AND SQ.id_question = Q.id
							AND SQ.id_subquestionnair = ES.id_subquestionnair
							AND ES.id_experience = '$experienceID';";
$resultCountSubcategories = mysqli_query($connection, $sqlCountSubcategories);
$countSubcategories = $resultCountSubcategories->num_rows;



// Fetch all the results, depending if all students or a specific one
if($studentID === "all") {

	$sql = "SELECT S.id AS subcategoryID,
		   	S.subcategoria AS subcategoryName,
	       	A.value AS score,
    	   	COUNT(id_student) AS `count`
			FROM subcategory AS S
    	    LEFT JOIN question AS Q
        		ON Q.id_subcategory = S.id
			JOIN answer AS A
    	    JOIN subquestionnair_question AS SQ
        	JOIN experience_subquestionnair AS ES
				-- WHERE Q.id_subcategory = S.id
		        WHERE A.id_question = Q.id
	    	    AND A.id_question = SQ.id_question
    	    	AND A.id_subquestionnair = SQ.id_subquestionnair
				AND SQ.id_subquestionnair = ES.id_subquestionnair
				AND ES.id_experience = '$experienceID'
    	        AND SQ.id_subquestionnair = '$momentID'
					GROUP BY score, subcategoryID
					ORDER BY score, subcategoryID";

} else {

	$sql = "SELECT S.id AS subcategoryID,
		   	S.subcategoria AS subcategoryName,
	       	A.value AS score,
    	   	COUNT(id_student) AS `count`
			FROM subcategory AS S
    	    LEFT JOIN question AS Q
        		ON Q.id_subcategory = S.id
			JOIN answer AS A
    	    JOIN subquestionnair_question AS SQ
        	JOIN experience_subquestionnair AS ES
				-- WHERE Q.id_subcategory = S.id
		        WHERE A.id_question = Q.id
	    	    AND A.id_question = SQ.id_question
    	    	AND A.id_subquestionnair = SQ.id_subquestionnair
				AND SQ.id_subquestionnair = ES.id_subquestionnair
				AND ES.id_experience = '$experienceID'
    	        AND SQ.id_subquestionnair = '$momentID'
        	    AND A.id_student = '$studentID' -- 118
					GROUP BY score, subcategoryID
					ORDER BY score, subcategoryID";

}

$result = mysqli_query($connection, $sql);



// Initialize Arrays
$datasets = [];
$dataLabels = [];
$scoreToIndex = [];
$i = 0;
$subcategoryIDToIndex = [];
$j = 0;



// Prepare result
while($row = mysqli_fetch_object($result)) {


	// Parse score (cause if might come from an open question)
	// or it might be a float, while we should expect an int
	// then cast it to string to use it as a map key
	
	$pointLabel = ($studentID === "all") ? " # of people who answered '" : " # of times student answered '";
	
	if(is_numeric($row->score)) {
		$score = $pointLabel . strval((int)$row->score) . "'"; // answers may be 5.0 or 5, so first we take out the .
	} else {
		continue;
	}


	// Create new label if new subcategory is detected
	if($subcategoryIDToIndex[$row->subcategoryID] || $subcategoryIDToIndex[$row->subcategoryID] === 0) { // index 0 should be skipped
		
		// nothing
		
	} else {
	
		// Create new subcategory
		$dataLabels[] = $row->subcategoryName;
		
		// Store subcategory index for $data array (inside dataset)
		$subcategoryIDToIndex[$row->subcategoryID] = $j;
		$j++;
		
	}

	
	
	// Create dataset for corresponding score
	if($scoreToIndex[$score] || $scoreToIndex[$score] === 0) { // index 0 should be skipped
	
		// nothing
	
	} else {

		// serves as a tally to check
		// which scores have been already
		// processed AND as a map of
		// score to index of the
		// $dataset array
		$scoreToIndex[$score] = $i;
		$i++;


		// Create new dataset for this label
		$datasets[] = [
			'label' => $score,
			'data' => array_fill(0, $countSubcategories, 0), // array of countSubcategories 0's
			'backgroundColor' => '#' . substr(sha1($score), 0, 6),
// 			'borderWidth' => 3,
// 			'borderColor' => '#' . substr(sha1($score), 0, 6),
			'stack' => $score
// 			'fill' => false
		];
		
	}


	// Append data point to corresponding subcategory
	$datasets[$scoreToIndex[$score]]['data'][$subcategoryIDToIndex[$row->subcategoryID]] = (int)$row->count;	


}




/*
	let data = {
		labels: dataLabels,
		datasets: [{
			label: auxiliaries['myChart2'].label,
			data: dataPoints,
			backgroundColor: auxiliaries['myChart2'].backgroundColor,
			borderColor: auxiliaries['myChart2'].borderColor,
			fill: false
		}]
	};
*/


$arr = [
	'datasets' => $datasets,
	'dataLabels' => $dataLabels
];


// Spit out response JSON
echo header("Content-Type: application/json; charset=utf-8");
echo json_encode($arr);