<?php
require __DIR__ . '/../bootstrap.php';
error_reporting(E_ALL);ini_set('display_errors', true);

$em = \EmotionHero\Application::getInstance()->getEm();
/* @var $hitRepo EmotionHero\Models\HitRepository */
$hitRepo = $em->getRepository(\EmotionHero\Models\Hit::class);

/* @var $currentHit \EmotionHero\Models\Hit */
$currentHit = $hitRepo->findOneBy(['hasImage'=>true], ['id'=>'DESC']);
$targetSet = $hitRepo->getTargetSetForTarget($currentHit->getTarget());
$betterHit = $hitRepo->getBetterHit($currentHit);

$printEmoBlocks = function($emotion, $feature, $steps = 6) use($em) {
	foreach(range(0, 100, 100/($steps-1)) as $i) {
	    /* @var $hitRepo EmotionHero\Models\HitRepository */
	    $hitRepo = $em->getRepository(EmotionHero\Models\Hit::class);
// if($feature == 'nose'){
// $items = [992, 1035, 701, 888, 671, 906, 693, 725, 762, 666, 751,992,728];
// $hit = $hitRepo->find($items[array_rand($items)]);
// } elseif($feature == 'mouth_left') {
// $items = [992, 1035, 1034, 888];
// $hit = $hitRepo->find($items[array_rand($items)]);
// } else{
    $hit = $hitRepo->getClosestHitWithImage($emotion, $i);
// }
	    $img = $hit->getFeatureImgAsString($feature);
	    $score = $hit->getEmotions()->getEmotionScore($emotion);
	    
	    $percentage = sprintf("%.0f %%",$score);
		echo <<< EOSNIPPET
	<div class="block">
	<img src="data:image/x-icon;base64,$img" title="{$hit->getId()}">

	<span class="perc">$percentage</span>
	</div>
EOSNIPPET;
	}
};


?>
<html>
    <head>
        <title>Emotion Hero</title>
    </head>
    <style type="text/css">

html{
	height:100%;
	overflow:hidden;
}
body{
	background:blue;
	font-family:"Unifont";
	font-weight:bold;
	font-size:1vw;
	margin:0.5em;
	font-family: sans-serif;
}
body.presentation{
	background:black;
}
h3{
	margin:0.5%;
	text-align:center;
	/*! background: white; */
	/*! color: black; */
}
h3 span{
	background:none;
	color:white;
	padding:0.2%;
	/*! border-bottom: solid 0.2em white; */
}

.block{
	width:100%;
	font-size:80%;
}
.mouth .emo-block{
	width:50%;
	float:left;
	height:5em;
}
.mouth .emotitle{
	display:block;
	width:14%;
	margin-right:0.14%;
	margin-left:0.14%;
	float:left;
	font-size:80%;
	padding-top:2.5%;
}
.mouth .block {
	width:14%;
	margin-right:0.14%;
	margin-left:0.14%;
	float:left;
}

/*.emotitle span:before{content:"‹";}
.emotitle span:after{content:"›";}*/
.emotitle{/*! font-style:italic; *//*! display: none; */}
.emotitle:before{content:"«";}
.emotitle:after{content:"»";}

img{
	width:100%;
	/*! filter:saturate(0%); */
	/*! mix-blend-mode: multiply; */
	/*mix-blend-mode: exclusion;*/
}

.perc{
	display:block;
	width:100%;
	text-align:center;
}

.emo-block{
	float:left;
	text-align:center;
}
.brows .emo-block {
	width:23%;
	margin-left:1%;
	margin-right:1%;
	height: 22em;
}

.nose .emo-block {
	width:12%;
	margin-left:1.14%;
	margin-right:1.14%;
}
.nose .emotitle{
	font-size:80%;
}
.emo-block-emos{
	position:relative;
}

.emo{
	text-align:center;
	float:left;
	background:black;
	color: white;
}
.brows{
	width:40%;
	margin-right:1%;
}
.nose{
	width:40%;
	margin-right:1%;
}
.mouth{
	width:81%;
	margin-top:1%;
}
img.curImg{
	position:absolute;
	left:0;
	mix-blend-mode:difference;
}

.currentHit svg{
	border-top: 1em solid blue;
	margin: 0px -0.5em;
	width: 100%;
	padding: 0.5em;
	width:100%;
}

.presentation .currentHit svg {
	border-top: solid 0.1em white;
}

.nose .block{position:relative;margin-bottom:2%;}
.nose .block span{position:absolute;top:0;right:0;color:white;text-align:right;padding:0.5%;}

.brows .emo-block.brow_explainer {
	margin-top:3%;font-size:85%;
	border-left: 0.3em solid blue;
	width: 22%;
	padding-left: 0.4em;
	margin-left: -0.1em;
}
.presentation .brows .emo-block.brow_explainer{
	border-left-color: black;
}
.brow_explainer img{filter:unset;margin-bottom:5%;}
.brow_explainer ol{
	margin:0;padding:0;
	counter-reset:li 4;

}
.brow_explainer li{
	text-align:left;
	margin-bottom:5%;
	list-style:none;
}
.brow_explainer li:before{
	content:counter(li) ". "; /* Use the counter as content */
	counter-increment:li; /* Increment the counter by 1 */
	color:red;
}

.currentHit{
	width:17%;
	position:absolute;
	right:0.5em;
	top:0.5em;
	background:yellow;
	padding:0.5%;
}
.presentation .currentHit {
	background:none;
	color:white;
}
.presentation .currentHit h3 span{
	color:white;
	background: none;
}
.currentHit h3 span{
	color:yellow;
}
.presentation .currentHit h3 span{
	color:white;
}
.currentHit h3 .last{color:red;}
.currentHit h3 .vs{background:none;color:black;padding-left:0.5em;padding-right:0.5em;}
.currentHit h3 .perfect{}

ul{
	font-size:80%;
	list-style:none;
	margin:0;
	padding:0;
}
.presentation ul{
	font-size:1.1em;
}
.currentHit li{
	clear:both;
}
.currentHit li .value{
	float:right;
}
.currentHit li .diff{
	float:right;
	clear:both;
	font-size:72%;
	color:gray;
}
.currentHit li .diff.negative{
	color:red;
}

.currentHit li .diff.positive{
	color:green;
}
.presentation .currentHit li .diff.positive{
	color:yellow;
}
.currentHit p {
	margin: 0 -0.5em 1% -0.5em;
	border-bottom: solid 1em blue;
	padding: 0.5em;
	text-align: center;
}
.presentation .currentHit p {
	border-bottom: solid 0.1em white;
}

    </style>
    <body class='presentation'>
<?php

echo "<div class='brows emo'><h3><span>eye brows</span></h3>";


foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) {	
    echo "<div class='emo-block'><span class='emotitle'>$emotion</span><div class='emo-block-emos'>";
    $printEmoBlocks($emotion, 'brows');
    //echo "<img class='curImg' src=\"data:image/x-icon;base64,{$currentHit->getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getEmotionScore($emotion)}%\">";
    echo "</div></div>";
}

?>
<div class="emo-block brow_explainer">
<img src="brow_explain_color.png">
<ol start="5">
<li>Outer Right Brow Corner</li>
<li>Right Brow Center</li>  
<li>Inner Right Brow Corner</li>    
<li>Inner Left Brow Corner</li>
<li>Left Brow Center</li>
<li>Outer Left Brow Corner</li>
</ol>
</div>
<?php

echo "</div>"; // .brows

echo "<div class='nose emo'><h3><span>nose</span></h3>";
foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) {	
    echo "<div class='emo-block'><span class='emotitle'>$emotion</span><div class='emo-block-emos'>";
    $printEmoBlocks($emotion, 'nose');
    //echo "<img class='curImg' src=\"data:image/x-icon;base64,{$currentHit->getFeatureImgAsString("nose")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getEmotionScore($emotion)}%\">";
    echo "</div></div>";
}

echo "</div>"; // .nose


echo "<div class='mouth emo'><h3><span>mouth</span></h3>";
foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) {	
    echo "<div class='emo-block'><span class='emotitle'>$emotion</span><div class='emo-block-emos'>";
    $printEmoBlocks($emotion, 'mouth_left');
    echo "</div></div>";
}

echo "</div>"; // .mouth





echo "<div class='currentHit'>";
echo "<h3><span class='last'>last</span><span class='vs'>vs</span><span class='perfect'>perfect</span></h3>";
// echo "<p>".\PrettyDateTime\PrettyDateTime::parse($currentHit->getGame()->getOriginalGameAt())."</p>";
echo "<p>aim:";
foreach($targetSet as $target) {
    echo " {$target->getScore()}% {$target->getEmotion()->getName()}";
}
echo "</p>";
if(empty($betterHit)) { 
    echo "<p>Best attempt so far</p>";
}
//echo "<p>aim: {$currentHit->getTarget()->getScore()}% ".$currentHit->getTarget()->getEmotion()->getName()."</p>";
echo "<ul>";
$expressions = array_keys($currentHit->getExpressions()::$EXPRESSIONS_2ND_PERSON);
sort($expressions);
foreach ($expressions as $expression) {
    $currentScore = $currentHit->getExpressions()->getExpressionScore($expression);
    echo "<li>";
    echo "<span class='name'>$expression</span>";
    echo "<span class='value'>". sprintf("%.5f", $currentScore)." %</span>";
    
    
    if(!empty($betterHit)) {
        $betterScore = $betterHit->getExpressions()->getExpressionScore($expression);
        $diff = $betterScore - $currentScore;
        if ($diff > 0) {
            $diffclass = "positive";
        } elseif ($diff < 0) {
            $diffclass = "negative";
        }
        echo "<span class='diff $diffclass'>". sprintf("%+.5f", $diff)." %</span>";
    }
    
    echo "</li>";
}
echo "</ul>";

$circles = "";

if(!empty($betterHit)) {
    foreach($betterHit->getPoints()->getNormalisedPoints() as $i => $point) {
    /*    $circles .= '<circle
           style="fill:gray;"
           id="point'.$i.'"
           cx="'.$point->getX().'"
           cy="'.$point->getY().'"
           r="0.7" />';*/
        $circles .= '<text
           style="fill:green;font-size:4"
           id="point'.$i.'"
           x="'.$point->getX().'"
           y="'.$point->getY().'"
           r="0.7">'.$i.'</text>';
    }
}

foreach($currentHit->getPoints()->getNormalisedPoints() as $i => $point) {
    $circles .= '<text
       style="fill:red;font-size:4"
       id="point'.$i.'"
       x="'.$point->getX().'"
       y="'.$point->getY().'"
       r="0.7">'.$i.'</text>';
}


echo <<< EOSVG
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   viewBox="-4 -4 108 108"
   id="svg2"
   version="1.1">
  <g id="layer1">
    $circles
  </g>
</svg>
EOSVG;




echo "</div>"; // .currentHit

?>
<script type="text/javascript">
	var socket = new WebSocket("ws://<?php echo $_SERVER['SERVER_NAME']; ?>:8181");
	socket.onopen = function(){
	   /*Send a small message to the console once the connection is established */
	   console.log('Connection open!');
	};
	socket.onclose = function(){
	   console.log('Connection closed');
	   location.reload(); 
	   // socket.connect()
	}
	socket.onerror = function(error){
		// reload page
	   console.log('Error detected: ' + error);
	   location.reload(); 
	}
	socket.onmessage = function(e){
		console.log(e.data);
		var message = JSON.parse(e.data);
	   // var server_message = e.data;
	   console.log(message);
	   if(message['action'] == 'update') {
	   		if(message['method'] == 'image' || message['method'] == 'game') {
	   			// reload page
	   			location.reload(); 
	   		}
	   }
	}
</script>
    </body>
</html>