<?php
################################################
# ce script permet de mettre à jour la table   #
# Performances avec les scores et les		   #
# performances des joueurs du tour qui		   #
# viens de se terminer						   #
################################################
include("../config.php3");
include($BIB."bib_generic.php3");


##################################
# Administration script defaults #
##################################
# pas de timeout possible qql soit l'action effectuée
set_time_limit($TIME_LIMIT);

function checkTriche($playerId)
{
	$row = db_fetch_array(main_db_query("SELECT SUM(IsSuspect) AS total,COUNT(*) AS nb FROM Players LEFT JOIN Members ON Members.Id=Players.MemberId WHERE FatherPId='".$playerId."'"));
	if ($row[nb]!=0)
		return $row[total]/$row[nb];
	else
		return 0;
}

function cmp_score($a,$b)
{
	if ($a==$b)
		return 0;
	
	if ($a>$b)
		return 1;
	else
		return 2;
}

function calcule_gain($Result,$Bet,$Amount,$rate1,$rate2)
{
	# si on a le meme resultat, score exact, on sort avec rate1
	if ($Result == $Bet)
	{
		return $Amount*$rate1;
	}
	
	# on etudie le result
	$tabResult = explode("-",$Result);
	$ResultType = cmp_score($tabResult[0],$tabResult[1]);

	# on etudie le Bet
	$tabBet = explode("-",$Bet);
	$BetType = cmp_score($tabBet[0],$tabBet[1]);

	# s'il a le gagnant, on sort avec rate2
	# sinon juste avec -1
	if ($BetType==$ResultType)
		return $Amount*$rate2;
	else
		return -1;
}

/* modifie les tableaux en entrée en les remplissant de manière associative, en associant */
/* l'ID des joueurs respectivement à leur performance, leur nb de perfects, leur nb de	  */
/* victoires, et leur nombre de paris. Le tableau des performances est trié suivant		  */
/* l'ordre des performances décroissantes												  */
function performance_joueurs ($paris, &$victories, &$perfects, &$missed, &$performances)
{
	while($pari = db_fetch_array($paris))
	{
		flush();
		# on recupère le pari du joueur
		if (strlen($pari[Bet])!=0)
		{
			$perf = calcule_gain($pari[Result],$pari[Bet],1,$pari[Rate1],$pari[Rate2]);
			if ($perf!=-1)
				$performances[$pari[PlayerId]] += $perf;
			$scores[$pari[PlayerId]] += $perf*$pari[Amount];
			// on calcule également le nombre de perfect, de victoires et de paris effectués
			if ( $perf == $pari[Rate1] )
			{
				$perfects[$pari[PlayerId]]+=1;
			}
			elseif ( $perf == $pari[Rate2] )
			{
				$victories[$pari[PlayerId]]+=1;
			}
			else
			{
				$missed[$pari[PlayerId]]+=1;
			}
		}
	}
	
	echo "nb in result : ".count($scores)."<br>";
	
	# on trie par ordre décroissant
	arsort($scores);
	return $scores;
}

?>

<html>
<head></head>
<link rel="stylesheet" href="admin.css">
<body rightmargin=0>
<div align=center class=trTitle>Mise à jour des résultats par tour</div>
<br>

<table border=0 cellpadding=4 cellspacing=4 class=univers align=center>
	<tr class=trTitle>
		<td align=center colspan=8>Liste des tours</td>
	</tr>
	<tr class=trTitle>
		<td >Tour N°</td>	
		<td >Nom</td>		
		<td >Date/Heure de Début</td>
		<td >Date/Heure de Fin</td>				
	</tr>

<?php
// on affiche un tableau comportant les tours existant dans la base
$tours = main_db_query ("SELECT * FROM Tours ORDER BY Id");
$r=0;
while ($tour=db_fetch_array($tours))
{
	$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
	$r++;
	echo "<tr bgcolor=".$color.">";
	echo "<td>$tour[Id]</td>";
	echo "<td>$tour[Name]</td>";
	echo "<td>$tour[ShowTime]</td>";
	echo "<td>$tour[EndTime]</td>";
	echo "</tr>";
}
echo "<tr class=trTitle><td colspan=15>&nbsp;<?php echo $error ?></td></tr></table>";

echo "<br><br>";
flush();

if ($submit=="Valider")
{
	// on affiche un tableau des matchs appartenant au tour choisi
	$matchs = main_db_query ("SELECT Matchs.MatchId, Matchs.Team1, Matchs.Team2, Matchs.Result, Matchs.Date, Matchs.Category, Matchs.Rate1, Matchs.Rate2 FROM Matchs, Categories WHERE Categories.Tour=".$tourId." AND Matchs.Category=Categories.CategoryId");
	$paris = main_db_query ("SELECT Paris.PlayerId, Paris.MatchId, Paris.Bet, Paris.Amount, Matchs.Result, Matchs.Rate1, Matchs.Rate2 FROM Paris, Matchs, Categories WHERE Paris.MatchId=Matchs.MatchId AND Categories.Tour=".$tourId." AND Matchs.Category=Categories.CategoryId");
	echo "<table border=0 cellpadding=4 cellspacing=4 class=univers align=center>
	<tr class=trTitle>
		<td align=center colspan=8>Liste des matchs du tour N°".$tourId."</td>
	</tr>
	<tr class=trTitle>
		<td>Match N°</td>
		<td>Equipe 1</td>
		<td>Equipe 2</td>
		<td>Score Final</td>
		<td>Date du match</td>
		<td>Catégorie</td>
	</tr>";
	$match = db_fetch_array ($matchs);
	$r=0;
	while ($match=db_fetch_array($matchs))
	{
		$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
		$r++;
		echo "<tr bgcolor=".$color.">";
		echo "<td>$match[MatchId]</td>";
		echo "<td>$match[Team1]</td>";
		echo "<td>$match[Team2]</td>";
		echo "<td>$match[Result]</td>";
		echo "<td>$match[Date]</td>";
		echo "<td>$match[Category]</td>";
		echo "</tr>";
	}
	echo "<tr class=trTitle><td colspan=15>&nbsp;<?php echo $error ?></td></tr></table>";
	echo "<br><br>";
	flush();
	
	if ($Actualiser==1)
	{
		// si la case actualiser était cochée, on met à jour la base de données
		$scores = performance_joueurs ($paris, &$victories, &$perfects, &$missed, &$performances);
		$r=0;
		// on affiche un tableau contenant le nombre de joueurs spécifié dans le formulaire
		echo
		"<br><br><table border=0 cellpadding=4 cellspacing=4 class=univers align=center>
			<tr class=trTitle>
				<td align=center colspan=9>Meilleurs scores du tour n°".$tourId."</td>
			</tr>
			<tr class=trTitle>
				<td >N</td>
				<td >Triche</td>
				<td >PlayerId</td>
				<td >Pseudo</td>
				<td >Score</td>
				<td >Performance</td>
				<td >NbPerfects</td>
				<td >NbVictoires</td>
				<td >NbMissed</td>
			</tr>";

		reset($performances);

		main_db_query ("DELETE FROM Performances WHERE Tour=".$tourId);

		while (list ($key, $val) = each ($scores))
		{
			$r++;
			$player = db_fetch_array(main_db_query("SELECT * FROM Players WHERE Players.Id='".$key."'"));
			if (empty($performances[$key]))
				$performances[$key]=0;
			if (empty($victories[$key]))
				$victories[$key]=0;
			if (empty($perfects[$key]))
				$perfects[$key]=0;
			if (empty($missed[$key]))
				$missed[$key]=0;
			if (empty($scores[$key]))
				$scores[$key]=0;
			if ($scores[$key]<0)
				$scores[$key]=0;
			main_db_query ("INSERT INTO Performances (PlayerId, Tour, Score, Perf, Correct, Perfect, Missed) VALUES ( ".$key.", ".$tourId.", ".($scores[$key]+100).", ".$performances[$key].", ".$victories[$key].", ".$perfects[$key].", ".$missed[$key].")");
			if ($r<=$NbWinners)
			{
				$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
				echo "<tr bgcolor=".$color.">";
					echo "<td>".$r."</td>";
					echo "<td>".checkTriche($key)."</td>";
					echo "<td align=center>".$key."</td>";
					echo "<td align=center>".$player[NickName]."</td>";
					echo "<td align=right>".number_format($scores[$key])."</td>";
					echo "<td align=right>".$performances[$key]."</td>";
					echo "<td align=right>".$perfects[$key]."</td>";
					echo "<td align=right>".$victories[$key]."</td>";
					echo "<td align=right>".$missed[$key]."</td>";
				echo "</tr>";
			}
		}
		echo "<tr class=trTitle><td colspan=9>&nbsp;<?php echo $error ?></td></tr></table>";
	}
	else
	{
		$r=0;
		// on affiche un tableau contenant le nombre de joueurs spécifiés dans le formulaire
		echo
		"<br><br><table border=0 cellpadding=4 cellspacing=4 class=univers align=center>
			<tr class=trTitle>
				<td align=center colspan=9>Meilleurs scores du tour n°".$tourId."</td>
			</tr>
			<tr class=trTitle>
				<td >N</td>
				<td >Triche</td>
				<td >PlayerId</td>
				<td >Pseudo</td>
				<td >Score</td>
				<td >Performance</td>
				<td >NbPerfects</td>
				<td >NbVictoires</td>
				<td >NbMissed</td>
			</tr>";
		$players = main_db_query ("SELECT Performances.PlayerId, Performances.Score, Performances.Perf, Performances.Perfect, Performances.Correct, Performances.Missed, Players.NickName FROM Performances, Players WHERE Performances.Tour='".$tourId."' AND Players.Id=Performances.PlayerId ORDER BY Performances.Score DESC");
		while (($player=db_fetch_array($players)) && $r<$NbWinners)
		{
			$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
			$r++;
			echo "<tr bgcolor=".$color.">";
			echo "<td>".$r."</td>";
			echo "<td>".checkTriche($player[PlayerId])."</td>";
			echo "<td align=center>".$player[PlayerId]."</td>";
			echo "<td align=center>".$player[NickName]."</td>";
			echo "<td align=right>".number_format($player[Score])."</td>";
			echo "<td align=right>".$player[Perf]."</td>";
			echo "<td align=right>".$player[Perfect]."</td>";
			echo "<td align=right>".$player[Correct]."</td>";
			echo "<td align=right>".$player[Missed]."</td>";
			echo "</tr>";
		}
		echo "<tr class=trTitle><td colspan=9>&nbsp;<?php echo $error ?></td></tr></table>";
	}
}

$Actualiser=0;
?>

<form>
	Mise à jour/Consultation des résultats par tour :<br><br>
	tour N° : <input size=2 type=text name=tourId value="<?php echo $tourId ?>"><br>
	Nombre de joueurs à afficher : <input size=2 type=text name=NbWinners value="<?php echo $NbWinners ?>"><br><br>
	Cocher ici pour mettre à jour la table des résultats par tour dans la base de données:
	<input type=CheckBox name=Actualiser value="1"><br><br>
	<input type=submit name=submit value="Valider">
</form>
</body>
</html>