<?php
################################################
# ce script permet de calculer le meilleur
# pronostiqueur d'une categorie (typiquement d'une journée de D1)
#
# A utiliser une fois que tous les matchs de la journée
# ont été mis à jour
################################################
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);

####################
# default values
####################
if (empty($NbWinners))
	$NbWinners=5;

####################
# constants
####################
define ("CHANCES", 10000);

####################
# Start functions
####################
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 0;
}

/* renvoie un tableau contenant les matchs de la catégorie choisie ou ayant le numéro ID */
/* demandé, dont les résultats ont été rentrés, avec toutes leurs caractéristiques		 */
function matchs_selectionnes(&$rows, $CategoryId, &$DateFrom, &$DateTo, $MatchSelected)
{
	if (!empty($CategoryId))
		$showCategory = "AND Matchs.Category='".$CategoryId."'";
	else
		$showCategory = "";

	if (!isset($DateFrom)  || $DateFrom=="")
		$DateFrom = "1999-01-01 10:00:00";

	if (!isset($DateTo) || $DateTo=="")
		$DateTo = "2015-01-01 10:00:00";

	if ($MatchSelected!="")
		$rows = main_db_query("SELECT *,Matchs.ShowTime as MatchShowTime FROM Matchs LEFT JOIN Categories ON Categories.CategoryId=Matchs.Category WHERE MatchId IN (".$MatchSelected.") AND Result!='0' ORDER BY Matchs.Date ASC");
	else
		$rows=main_db_query("SELECT *,Matchs.ShowTime as MatchShowTime FROM Matchs LEFT JOIN Categories ON Categories.CategoryId=Matchs.Category WHERE Matchs.Date>'".$DateFrom."' AND Matchs.Date<'".$DateTo."' AND Result!='0' ".$showCategory." ORDER BY Matchs.Date ASC");

}
/* --------------------------------------------------------------------------------------------- */

/* 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 (&$all_players, &$rows, &$victories, &$perfects, &$missed)
{
	$i=0;
	while($player = db_fetch_array($all_players))
	{
		$i++;
		if ($i%50==0)
		{
			echo $i."-";
			flush();
		}
		
		# on check si tous les matchs ont été joués
		db_data_seek($rows,0);
		$pts=0;
		$nb_victoires=0;
		$nb_perfects=0;
		$nb_missed=0;
		while($match = db_fetch_array($rows))
		{
			# on recup le pari du joueur
			$player_score = db_fetch_array(main_db_query("SELECT Bet, Date FROM Paris WHERE PlayerId='$player[Id]' AND MatchId='$match[MatchId]'"));
	
			if (strlen($player_score[Bet])==0)
			{
				$pts=0;
				$nb_victoires=0;
				$nb_perfects=0;
				$nb_missed = 0;
				break;
			}
			
			$perf = calcule_gain($match[Result],$player_score[Bet],1,$match[Rate1],$match[Rate2]);
			$pts += $perf;
			
			// on calcule également le nombre de perfect, de victoires et de paris effectués
			if ( $perf == $match[Rate1] )
				{
					$nb_perfects++;
				}
			elseif ( $perf == $match[Rate2] )
				{
					$nb_victoires++;
				}
			else
				{
					$nb_missed++;
				}
				
			$aRand = strtotime($player_score['Date']) / 10000000000;
		}
		
		# on ajoute par défaut pour éviter d'avance les égalités
		if ($pts!=0)
			{
				//$performances[$player[Id]] = $pts + (rand(1,CHANCES/10))/CHANCES;
				$performances[$player[Id]] = $pts - $aRand;
				$victories[$player[Id]] = $nb_victoires;
				$perfects[$player[Id]] = $nb_perfects;
				$missed[$player[Id]] = $nb_missed;
			}
	}
	
	# on trie par ordre décroissant
	echo "nb in result : ".count($performances)."<br>";
	
	arsort($performances);
	
	db_data_seek($all_players,0);
	
	return $performances;
}
####################
# End functions
####################

?>

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

<table border=0 cellpadding=4 cellspacing=4 class=univers>
	<tr class=trTitle>
		<td align=center colspan=8>Liste des catégories</td>
	</tr>
	<tr class=trTitle>
		<td >Categorie N°</td>
		<td >Catégorie Père N°</td>	
		<td >Nom</td>		
		<td >Date/Heure de fin</td>
		<td >Date/Heure d'affichage</td>				
	</tr>
<?php
$Categories = main_db_query("SELECT * FROM Categories ORDER BY Container, EndTime DESC");
while($category=db_fetch_array($Categories))
{
	$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
	$r++;
	echo "<tr bgcolor=".$color.">";
	echo "<td>$category[CategoryId]</td>";
	echo "<td>$category[Category]</td>";
	echo "<td>$category[Name]</td>";
	echo "<td>$category[EndTime]</td>";
	echo "<td>$category[ShowTime]</td>";
	echo "</tr>";
}
echo "<tr class=trTitle><td colspan=15>&nbsp;<?php echo $error ?></td></tr></table>";
?>
<table border=0 cellpadding=4 cellspacing=4 class=univers>
	<tr class=trTitle>
		<td align=center colspan=9>Liste des matches terminés</td>
	</tr>
	<tr class=trTitle>
		<td >Match N°</td>
		<td >Equipe 1</td>	
		<td >Equipe 2</td>		
		<td >Resultat</td>
		<td >Date/Heure d'affichage</td>		
		<td >Date/Heure de fin de pari</td>
		<td >Coef. pari exact</td>
		<td >Coef. pari gagnant</td>
		<td >Categorie</td>
	</tr>
<?php
# on affiche les matchs dont les résultats on été rentrés pour tel category
		matchs_selectionnes ($rows, $CategoryId, $DateFrom, $DateTo, $MatchSelected);

while($row=db_fetch_array($rows))
{
	$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
	$r++;
	echo "<tr bgcolor=".$color.">";
	echo "<td>".$row[MatchId]."</td>";
	echo "<td>".$row[Team1]."</td>";
	echo "<td>".$row[Team2]."</td>";
	echo "<td>".$row[Result]."</td>";
	echo "<td>".$row[MatchShowTime]."</td>";
	echo "<td>".$row[Date]."</td>";
	echo "<td>".$row[Rate1]."</td>";
	echo "<td>".$row[Rate2]."</td>";
	echo "<td>".$row[Name]."</td>";
	echo "</tr>";
}
echo "<tr class=trTitle><td colspan=15>&nbsp;<?php echo $error ?></td></tr></table>";


if ($submit == "Valider")
{
	# on cherche le meilleur pronostiqueur parmi les matchs affichés
	
	# récup des Id de tous les players
	$all_players = main_db_query("SELECT Id FROM Players");
	srand(time());
	
	$result = performance_joueurs (&$all_players, &$rows, &$victories, &$perfects, &$missed);
	$r=0;
	
	echo
	"<table border=0 cellpadding=4 cellspacing=4 class=univers>
		<tr class=trTitle>
			<td align=center colspan=16>Les meilleurs pronostiqueurs des matchs ci-dessus :</td>
		</tr>
		<tr class=trTitle>
			<td ></td>
			<td >Triche</td>
			<td >Category</td>
			<td >N</td>
			<td >PlayerId</td>
			<td >Pseudo</td>
			<td >Email</td>
			<td >Nom</td>
			<td >Prenom</td>
			<td >Adresse</td>
			<td >CP</td>
			<td >Ville</td>
			<td >Pays</td>
			<td >NbVictoires</td>
			<td >NbPerfects</td>
			<td >NbMissed</td>
		</tr>";
	
	reset($result);
	
	while (list ($key, $val) = each ($result))
	{
		$r++;
		$row = db_fetch_array(main_db_query("SELECT * FROM Players LEFT JOIN Members ON Members.Id=Players.MemberId WHERE Players.Id='".$key."'"));
		
		if ($r<=$NbWinners)
		{
			$color = ($r % 2 == 0)? "#FFFFFF":"#E8E8E8";
			echo "<tr bgcolor=".$color.">";
			echo "<td>".$val."</td>";
			echo "<td>".checkTriche($key)."</td>";
			echo "<td>".$CategoryId."</td>";
			echo "<td>".$r."</td>";
			echo "<td>".$key."</td>";
			echo "<td>".$row[NickName]."</td>";
			echo "<td>".$row[Email]."</td>";
			echo "<td>".$row[Name]."</td>";
			echo "<td>".$row[FirstName]."</td>";
			echo "<td>".$row[Address]."</td>";
			echo "<td>".$row[Zip]."</td>";
			echo "<td>".$row[Town]."</td>";
			echo "<td>".$row[Country]."</td>";
			echo "<td>".$victories[$key]."</td>";
			echo "<td>".$perfects[$key]."</td>";
			echo "<td>".$missed[$key]."</td>";
			echo "</tr>";
		}
	}
	echo "<tr class=trTitle><td colspan=16>&nbsp;<?php echo $error ?></td></tr></table>";
}
?>

<form>
	Recherche des meilleurs pronostiqueurs :<br><br>
<table>
	<tr>
		<td>
			Par Matchs
		</td>
		<td>
			<input type=text name=MatchSelected value="<?php echo $MatchSelected ?>"> (séparation par des virgules)
		</td>
	</tr>
	<tr>
		<td>
			ou
		</td>
	</tr>
	<tr>
		<td>
			Categorie N° :
		</td>
		<td>
			<input size=2 type=text name=CategoryId value="<?php echo $CategoryId ?>">
		</td>
	</tr>
	<tr>
		<td>
			Du
		</td>
		<td>
			<input type=text name=DateFrom value="<?php echo $DateFrom ?>">AAAA-MM-JJ HH:MM:SS
		</td>
	</tr>
	<tr>
		<td>
			au :
		</td>
		<td>
			<input type=text name=DateTo value="<?php echo $DateTo ?>">AAAA-MM-JJ HH:MM:SS
		</td>
	</tr>
	<tr>
		<td>
			Nombre de joueurs à afficher :
		</td>
		<td>
			<input size=2 type=text name=NbWinners value="<?php echo $NbWinners ?>">
		</td>
	</tr>
</table>
<input type=submit name=submit value="Valider">
</form>
</body>
</html>
