<?php
#include($BIB."bib_cartes.php3");

################# LOCAL CONSTANTS ####################
# les personnes dont l'email contient ces mots perdent
/*
$EMAILS_INDESIRABLES[0] = "cofinoga";
$EMAILS_INDESIRABLES[1] = "vivacance";
$EMAILS_INDESIRABLES[2] = "sportmarket";
*/

#######################################################

function gratte($player, $member, $date)
{
	global $EMAILS_INDESIRABLES, $FREQUENCE_GAIN_MAX;
	
	# initialisation
	$doit_perdre = false;

	# vérifie les personnes qui doivent perdre :
	
	# 1. les personnes spécifiées dans EMAILS_INDESIRABLES
	$nbEmailsIndesirables = count($EMAILS_INDESIRABLES);
	for ($i = 0 ; $i < $nbEmailsIndesirables ; $i++)
	{
		if (strstr($member['Email'], $EMAILS_INDESIRABLES[$i]))
		{
			$doit_perdre = true;
			break;
		}
	}

	# 2. s'il a déjà gagné cette semaine
	$dateAnterieure = date("Y-m-d 00:00:00", my_local_time() - $FREQUENCE_GAIN_MAX);
	$rowDejaGagnant = db_fetch_array(main_db_query("SELECT PlayerId FROM Winners WHERE Winners.Date > '".$dateAnterieure."' AND PlayerId='".$player['Id']."'"));
	if ($rowDejaGagnant)
		$doit_perdre = true;
	//debug("doit_perdre=".$doit_perdre."..".$dateAnterieure);
	# on prépare la variable de résultat
	$resultat = array(0, 0, 0, 0);

	# si il ne remplit pas de pré-conditions où il doit perdre, on effectue le tirage au sort
	if (!$doit_perdre)
	{
		# ici est effectué le tirage au sort
		$resultat = gagne_cadeau($date);

		# $doit_perdre est un booléen indiquant s'il a gagné ou non
		$doit_perdre = ($resultat[0] == 0);
	}
	# récupération du ticket de jeu. get_carte() prend en 1er paramètre si le ticket sera gagnant ou non
	$carteId = get_carte(!$doit_perdre);
	
	# on traite son jeu et on retourne le tableau de résultats
	# le grattage est automatiquement validé
	main_db_query("INSERT INTO Grattages (PlayerId, Resultat, Gain, Date, Valide, CarteId)".
	" VALUES ('".$player['Id']."', '".$resultat[0]."', '".$resultat[1]."', '".$date."', ".
	"'1', '".$carteId."')");

	# on a besoin du grattageId qui a été généré
	$grattage_row = db_fetch_array(main_db_query("SELECT * FROM  Grattages WHERE PlayerId = '".$player['Id']."' AND Date='".$date."'", true));
		
	return $grattage_row;
}

# (histo) cette fonction retourne l'id d'une carte (ici 1 pour une carte gagnante, 0 sinon)
function get_carte($gagne = false)
{
	return (($gagne) ? 1 : 0);
}


function gagne_cadeau($date)
{
	global $GRATTAGE_CADEAUX_GAGNE, $GRATTAGE_CADEAUX_PERDU, $CHANCE_DE_GAIN;
	
	// 1 on récupère tous les cadeaux disponibles
	$rowsCadeaux = main_db_query("SELECT * FROM Cadeaux WHERE Quantite>0 AND ShowTime<='".$date."' AND EndTime>='".$date."'");
	$nbCadeauxRestant = db_num_rows($rowsCadeaux);

	# s'il reste des cadeaux !
	if ($nbCadeauxRestant > 0)
	{
		// on fait le tirage au sort pour voir s'il gagne
		$gagne_cadeau = tirageAuSort($CHANCE_DE_GAIN);
		//debug("gagne_cadeau=".$gagne_cadeau);
		#debug("ici");

		if ($gagne_cadeau)
		{
			//debug("il a gagné");
			
			# on récupère les infos sur les cadeaux
			$i = 0;
			while ($rowCadeau = db_fetch_array($rowsCadeaux))
			{
				$tabCadeaux[$i]['Id'] = $rowCadeau['Id'];
				$tabCadeaux[$i]['Image'] = $rowCadeau['Image'];
				$tabCadeaux[$i]['Text'] = $rowCadeau['Text'];
				$tabCadeaux[$i]['Quantite'] = $rowCadeau['Quantite'];
				$tabCadeaux[$i]['Chances'] = $rowCadeau['Chances'];
				$i++;
			}
			//debug(print_r($tabCadeaux, true));
			// Etape 2 : on détermine quel cadeau il a éventuellement gagné
			// on prépare le tirage au sort pondéré
			$nb_jetons = 0;
			for ($i = 0 ; $i < $nbCadeauxRestant ; $i++)
			{
				#debug( "cadeau 1 : " .$tabCadeauxId[$i].", " . $CHANCE_CADEAU[$i]." chances, <br>");
				$cadeau_borne_inf[$i] = $nb_jetons;
				$nb_jetons += $tabCadeaux[$i]['Chances'];
				$cadeau_borne_sup[$i] = $nb_jetons-1;
				if ($cadeau_borne_sup[$i] < $cadeau_borne_inf[$i])
					$cadeau_borne_sup[$i] = $cadeau_borne_inf[$i];
			}
			//debug( "nb de jetons : ".$nb_jetons."<br>");
			$tirage = mt_rand(0, $nb_jetons);
			//debug("tirage2 : ".$tirage."<br>");
			$index_cadeau = -1;
			//debug("Nb Kdo restant:".$nbCadeauxRestant);
			for ($i = 0 ; $i < $nbCadeauxRestant ; $i++)
			{
				//debug("cadeau ".$i." : inf=".$cadeau_borne_inf[$i]." et sup=".$cadeau_borne_sup[$i]."<br>");
				if (($tirage >= $cadeau_borne_inf[$i]) && ($tirage <= $cadeau_borne_sup[$i]))
				{
					$index_cadeau = $i;
					//debug("trouvé : ".$index_cadeau."<br>");
					break;
				}
			}

			//debug($index_cadeau);

			# pour être sur de l'affectation des cadeaux, on revérifie par valideCadeau
			# si entre le début de la fonction et ici qql'un a déjà gagné un même cadeau
			# et qu'il n'y en a plus, on invalide !			
			//debug("index_cadeau=".$index_cadeau);
			if ($index_cadeau >= 0)
			{
				if (valideCadeau($tabCadeaux[$index_cadeau]['Id']))
				{
					return array($GRATTAGE_CADEAUX_GAGNE, $tabCadeaux[$index_cadeau]['Id'], $tabCadeaux[$index_cadeau]['Image']);
				}
			}
		}
	}
	else
	{
		return array($GRATTAGE_CADEAUX_PERDU,0,0);
	}
	
	return array($GRATTAGE_CADEAUX_PERDU,0,0);
}

# effectue un tirage au sort avec le % de gain en paramètre
function tirageAuSort($pourcentage_gagnant)
{
	mt_srand ((double) microtime() * 1000000);
	$tirage = mt_rand(0, 10000);
	//debug("tirage=".$tirage." <= ".$pourcentage_gagnant * 100);
	return ($tirage <= $pourcentage_gagnant * 100);
	
}

//fonction developpée pour une gestion du jeu basée sur l'id de la partie/tirage
function getGameId($player)
{
	
	$row = db_fetch_array(main_db_query("SELECT TirageId FROM PlayerTirages WHERE PlayerId=".$player["Id"]." ORDER BY RDate DESC"));
	
	if(isset($row["TirageId"]))
	{
		return $row["TirageId"];
	}
	else
	{
		return 1;
	}
}

?>
