<?php
######################################################
# CONSTANTS
######################################################
# constante, nb de secondes avant le nouveau ping
$iNewPing = 2700;
$NB_WANTED = 4;
$TAB_WANTED[1] = 500;
$TAB_WANTED[2] = 2000;
$TAB_WANTED[3] = 8000;
$TAB_WANTED[4] = 16000;

$NB_PTS_PAR_FILLEUL = 5;
$NB_PTS_PAR_P_FILLEUL = 1;

######################################################

function showFilleuls($player)
{
	if ($player['Sons'] == 0)
		$s = "Vous n'avez pas encore de filleuls";
	elseif ($player['Sons'] == 1)
		$s = "Vous avez 1 filleul";
	else
		$s = "Vous avez ".$player['Sons']." filleuls";

	return $s;
}

function showTickets($player)
{
	return $player['Sons']+1;
}



function getNbPlayers()
{
	$query = "SELECT COUNT(*) AS total FROM Players";
	$GLOBALS["vg_pdo"]->query($query);
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();
	return $row['total'];
}


# retourne le wanted suivant le nb de joueurs dans la bdd
function getCurrentWanted($iNbPlayers)
{
	global $NB_WANTED, $TAB_WANTED;
	
	$iCurrentWanted = 0;
	do
		$iCurrentWanted++;
	while(($iCurrentWanted < $NB_WANTED) and ($TAB_WANTED[$iCurrentWanted] > 0) and ($iNbPlayers >= $TAB_WANTED[$iCurrentWanted]));
	
	return $iCurrentWanted;
}

# retourne le prochain checkpoint
function getNextCheckPoint($iCurrentWanted)
{
	global $TAB_WANTED;
	
	return $TAB_WANTED[$iCurrentWanted];
}


function getNbTickets($player)
{
	/*global $NB_PTS_PAR_FILLEUL, $NB_PTS_PAR_P_FILLEUL;
	
	return ($player['Sons']*$NB_PTS_PAR_FILLEUL)+($player['GrandSons']*$NB_PTS_PAR_P_FILLEUL + 1);*/
	//debug("SELECT SUM(Tickets) AS SOMME FROM HistoTicket WHERE PlayerId=".$player['Id']);
	$query = "SELECT SUM(Tickets) AS SOMME FROM HistoTicket WHERE PlayerId=:PID".$player['Id'];
	$args = Array(
		":PID"=>$Player[Id]
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();
	return $row['SOMME'];
}


# retourne l'état jeu du player
# un tableau :
# créditsRestants : le nb de crédits qu'il lui reste à jouer
# prochainTirage : le prochain questionnaire qui lui permettra de gagner un crédit supplémentaire
# catStartId : Id du quiz pour le prochain tirage (cf. système pour poser la question)
function etatJeu($player)
{
	global $NB_CREDITS_BONUS, $ARCHIVES_DIR;
	
	# on regarde d'abord s'il lui reste des crédits, auquel cas, il finit d'abord ses crédits
	if ($player['Credits'] > 0)
	{
		
		$creditRestant = $player['Credits'];
	}
	else
	{
		
		$creditRestant = 0;
		
		# ici il n'a plus de crédit, il va falloir qu'il passe aux questionnaires
		# ici on détermine combien le joueur en a déjà fait
		$query = "SELECT TirageId FROM PlayerTirages WHERE PlayerId=:PID";
		$args = Array(
			":PID"=>$Player[Id]
		);
		$GLOBALS["vg_pdo"]->query($query,$args);
		

		$nbCreditBonusUsed = $GLOBALS["vg_pdo"]->rowCount();
		
		# s'il n'a pas déjà fait tous les questionnaires
		//debug("USED>>".$nbCreditBonusUsed." TOTAL>>".$NB_CREDITS_BONUS);
		if ($nbCreditBonusUsed < $NB_CREDITS_BONUS)
		{
			
			# on détermine le prochain questionnaire
			if ($nbCreditBonusUsed > 0)
			{				
				$filtre = "WHERE Id NOT IN (";
				for ($i = 0 ; $i < $nbCreditBonusUsed; $i++)
				{
					$rowCreditBonus = $GLOBALS["vg_pdo"]->fetch_assoc();
					$filtre .= "'".$rowCreditBonus['TirageId']."', ";
				}
				
				# on retire le dernier espace et la dernière virgule
				$filtre = substr($filtre, 0 , -2).")";
			}
			else
				$filtre = "";
			
			# récup du prochain questionnaire pour avoir un creditBonus
			$query = "SELECT * FROM Tirages ".$filtre." ORDER By Ordre ASC";
			$GLOBALS["vg_pdo"]->query($query);
			$rowNextCreditBonus = $GLOBALS["vg_pdo"]->fetch_assoc();
			
			####################### DESACTIVE LE QUIZ ###################
			#$catStartId = getQActualCategory();

		}
		else
		{
			# il a déjà fait tous les questionnaires
			$catStartId = 0;
			$rowNextCreditBonus = false;
		}
	}
	#debug("Jeu5FIN");
	
	return array($creditRestant, $catStartId, $rowNextCreditBonus);
}

# débite le joueur d'un crédit
function debitePlayer($player)
{
	$query = "UPDATE Players SET Credits=Credits-1 WHERE Id=:PID";
	$args = Array(
			":PID"=>$Player[Id]
		);
	$GLOBALS["vg_pdo"]->query($query,$args);
	
}

# on valide le grattage (obsolete car le tirage est automatiquement validé à la création)
function valideGrattage($rowGrattage)
{
	$query = "UPDATE Grattages Set Valide='1' WHERE Id=:GID";
	$args = Array(
			":GID"=>$rowGrattage[Id]
		);
	return $GLOBALS["vg_pdo"]->query($query,$args);
	
}

function valideCadeau($cadeauId)
{
	############# !!!!!!!! #################
	# on doit être sur que le cadeau affecté est encore dispo
	# pour cela on regarde dans le master
	$query = "SELECT Quantite FROM Cadeaux WHERE Id=:CID AND Quantite > 0";
	$args = Array(
			":CID"=>$cadeauId
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	$row = $GLOBALS["vg_pdo"]->fetch_assoc();

	if ($row)
	{
		$query = "UPDATE Cadeaux SET Quantite=Quantite-1 WHERE Id=:CID";
		$args = Array(
			":CID"=>$cadeauId
		);
		$GLOBALS["vg_pdo"]->query($query,$args);
		
		# on vérifie une seconde fois
		$query = "SELECT Quantite FROM Cadeaux WHERE Id=:CID";
		$args = Array(
			":CID"=>$cadeauId
		);
		$GLOBALS["vg_pdo"]->query($query,$args);
		$row = $GLOBALS["vg_pdo"]->fetch_assoc();
		
		# attention si on a un <0 c'est qu'il y a eu un pb !
		if ($row['Quantite'] < 0)
		{
			# on remet le truc à zéro
			$query = "UPDATE Cadeaux SET Quantite = 0 WHERE Id=:CID";
			$args = Array(
				":CID"=>$cadeauId
			);
			$GLOBALS["vg_pdo"]->query($query,$args);
		}
		else
			return true;
	}

	return false;
}

# valide le gain d'un cadeau
function setCadeauToWinner($rowGrattage)
{
	# récupère le libellé du cadeau
	$query = "SELECT * FROM Cadeaux WHERE Id=:GID";
	$args = Array(
		":GID"=>$rowGrattage['Gain']
	);
	$GLOBALS["vg_pdo"]->query($query,$args);
	$rowCadeau = $GLOBALS["vg_pdo"]->fetch_assoc();
	
	# construit la string pour session
	$session = date("d-m-Y", strtotime($rowGrattage['Date']));
	
	# on l'insère dans la table des gagnants
	$query = "INSERT INTO Winners (PlayerId, Gift, Date, Score, Session, Ordre, CategoryId, PeriodId, CodeSesame, GrattageId) VALUES (".
		":PID".
		",:GIFT".
		",:DATE".
		",'0".
		",:SESSION".
		",'1".
		",'0".
		",'0".
		",:GAIN".
		",:GRATTAGE)";	
	$args = Array(
		":PID"=>$rowGrattage['PlayerId']
		,":GIFT"=>addslashes($rowCadeau['Text'])
		,":DATE"=>$rowGrattage['Date']
		,":SESSION"=>addslashes($session)
		,":GAIN"=>$rowGrattage['Gain']
		,":GRATTAGE"=>$rowGrattage['Id']
	);
	$GLOBALS["vg_pdo"]->query($query,$args);

	return $rowCadeau;
}

# indique que le joueur a gagné aujourd'hui, il ne peut plus gagner
function setPlayerHasWinToday($player)
{
	$query = "UPDATE Players SET JeuHasWin = 1 WHERE Id=:PID";
	$args = Array(
		":PID"=>$player['Id']
	);
	return $GLOBALS["vg_pdo"]->query($query,$args);

}

function isPlayerHasWinToday($player)
{
	return $player['JeuHasWin'];
}

# cette fonction va supprimer tous les créditsBonus restant
function setNoMoreCreditBonus($player, $date)
{
	global $NB_CREDITS_BONUS;
	
	# ici il faut refaire une requette sur le player car son crédit a été débité
	
	# on parcourt tous les créditsBonus et on les insère
	/*for($r=0; $r < $NB_CREDITS_BONUS; $r++)
	{*/
		list($creditRestant, $catStartId, $rowNextCreditBonus) = etatJeu($player);

		if ($rowNextCreditBonus['Id'] > 0){
			$query = "INSERT INTO PlayerTirages (PlayerId,TirageId, RDate) VALUES (:PID,:CREDITBONUS, :DATE)";
			$args = Array(
				":PID"=>$player['Id']
				,":CREDITBONUS"=>$rowNextCreditBonus['Id']
				,":DATE"=>$date
			);
			$GLOBALS["vg_pdo"]->query($query,$args);
		}
	//}
}

# effectue un tirage jeu complet, retourne le row du Grattage
function executeGame(&$player, $member)
{
	global $GRATTAGE_CADEAUX_GAGNE,$IMAGES_DIR, $GAME_NAME,$CUSTOMER_SERVICE,$SERVER_URL,$lang;
	
	# c'est cette date qui fait fois dans tout le processus de gain
	$date = date("Y-m-d H:i:s", my_local_time());
	
	# on entame le crédit
	debitePlayer($player);
	
	# on réactualise le player (le crédit a été débité)
	$player = getplayer2($player['Id']);
	$NickName=$player['NickName'];
	# ici le tirage de son ticket
	# il nous retourne le row inséré dans la bdd
	$rowGrattage = gratte($player, $member, $date);

	# s'il gagne, on le met dans les winners
	if ($rowGrattage['Resultat'] == $GRATTAGE_CADEAUX_GAGNE)
	{
		#debug("ici");
		
		# on lui affecte son cadeau
		$rowCadeau = setCadeauToWinner($rowGrattage);
		
		# on indique que le joueur a gagné aujourd'hui
		setPlayerHasWinToday($player);
		
		# en plus il ne doit plus pouvoir jouer après avoir gagné
		################ SPECIFIC VIVAC ##################
		# la personne peut encore jouer même après avoir gagné
		//setNoMoreCreditBonus($player, $date);

		# on lui envoit un mail de confirmation de son gain
		$subject=$GAME_NAME." : votre lot";
		$msg = loadTemplate($GAME_DIR."Mailing/template_gagnants.html");
		$msg = replaceTag("__NICKNAME__", $member["FirstName"]." ".$member["Name"], $msg);	  	
		$msg = replaceTag("__GAME_NAME__", $GAME_NAME, $msg);
		$msg = replaceTag("__GAME_URL__", $SERVER_URL, $msg);
		$msg = replaceTag("__EMAIL__", $member["Email"], $msg);
		$msg = replaceTag("__GIFT__", $rowCadeau["Text"], $msg);
		$msg = replaceTag("__IMAGESURL__", $IMAGES_DIR, $msg);
		$msg = replaceTag("__URL__", $SERVER_URL, $msg);
		
		generic_mail($member['Email'], $subject, $msg,
			   "From: ".$GAME_NAME." <".$CUSTOMER_SERVICE.">\n" . 
			   "Reply-To: $CUSTOMER_SERVICE\n" . 
			   "MIME-Version: 1.0\n".
			   "X-Mailer: PHP/" . phpversion()."\n".
				 "MIME-Version: 1.0\n".
				 "Content-Type: text/html; charset=iso-8859-1"."\n"
			 );
		
	}
		
	return array($rowGrattage, $rowCadeau);
}

?>