<?php

/**
 * @brief Classe représentant des informations de classement
 */
class ranker
    {

    ///Objet user de l'utilisateur courant
    public $user;
    
    ///Nombre de point pour le classement
    public $point;
    
    ///Durée de la partie
    public $length;
    
    ///Nombre de parties effectuées
    public $nb_game;
    

    /**
     * @brief Constructeur
     * @arg $type type de classement (l'objet courant de chargera pas les mêmes données). ex : GLOBAL ou CAT
     * @arg $args arguments supplémentaire pour la construction de l'objet courant
     * 
     * @note si on a le type GLOBAL, args représente un singleton avec le login seulement si on a CAT, args représente un tableau avec le login et le nom de la catégorie demandées
     */
    public function __construct($type, $args)
        {
        //On regarde quel autobuilder on doit appeler
        if ($type == "global")
            {
            //On a demandé un objet pour un classement global
            $this->buildGlobal($args);
            } elseif ($type == "cat")
            {
            //On a demandé un objet pour une catégorie
            $this->buildCat($args);
            }
        }

    /**
     * @brief Fonction d'auto construction pour un classement global
     * @arg $args tableau contenant seulement le login
     */
    public function buildGlobal($args)
        {
        //Inclusion des fichiers nécessaire
        include_once 'dao/point_manager.php';
        include_once 'metier/user.php';
        include_once "dao/dao.php";
        include_once "dao/bdd.php";

        //Mise en place des données
        $login = $args["login"];

        //Chargement des données utilisateur
        $this->user = new user($login);


        //Chargement de toutes les parties du joueur
        $games = point_manager::getGamesByLogin($login);

        //On établit le nombre total de point pour le joueur ainsi que le temps
        //total
        $this->point = 0;
        $this->length = 0;

        //Pour toutes les parties, on additionne les points
        foreach ($games as $game)
            {
            $this->point+= point_manager::getGamePoint($game[0]);
            $length = point_manager::getLengthByGame($game);
            $this->length += $length[0];
            }

        //On calcul le nombre total de partie jouées
        $this->nb_game = count($games);
        }

    /*
     * @brief Fonction d'autoconstruction pour un classement par catégorie
     * @arg $args tableau contenant le login et la catégorie
     */
    public function buildCat($args)
        {
        //Inclusion des fichiers nécessaires
        require_once 'metier/user.php';
        require_once 'dao/point_manager.php';
        require_once 'dao/bdd.php';

        //Mise en place des variables standard pour la fonctions
        $login = $args["login"];
        $cat = $args["cat"];

        //On crée un nouvel utilisateur
        $this->user = new user($login);

        //Chargement de toutes les parties selon la catégorie du joueur
        $games = point_manager::getGameByLoginByCat($login, $cat);

        //Initialisation des variables locales de l'objet
        $this->length = 0;
        $this->nb_game = 0;
        $this->point = 0;

        //On boucle pour chaque parties
        foreach ($games as $game)
            {
            $this->point+=point_manager::getGamePoint($game["id"]);
            //  $this->length+= point_manager::getLengthByGame($game["id"]);
            }

        //Mise en place du nombre de parties
        $this->nb_game = count($games);
        }

    /**
     * @brief Obtient l'utilisateur courant
     * @return objet user
     */
    public function getUser()
        {
        return $this->user;
        }

    /**
     * @brief Obtient le nombre de point
     * @return int
     */
    public function getPoint()
        {
        return $this->point;
        }

    /**
     * @brief Obtient la durée d'une partie
     * @return int (temps en milliseconde)
     */
    public function getLength()
        {
        return $this->length;
        }

    /**
     * @brief Obtient le nombre de parties jouées
     * @return int
     */
    public function getNbGame()
        {
        return $this->nb_game;
        }

    }

?>
