<?php


/**
 * @brief Ligne de la table user représentant un utilisateur
 */
class user {

    ///Login du joueur
    private $login;
    
    ///Hash du mot de passe du joueur
    private $pwd;
    
    ///Nom du joueur
    private $nom;
    
    ///Prenom du joueur
    private $prenom;
    
    ///Date d'inscription sur le site du joueur
    private $date_inscription;
    
    ///Parties jouées par le joueur
    private $games;
    
    ///Email du joueur
    private $email;
    

    /**
     * @brief Constructeur de joueur
     * @arg $login login du joueur
     * @arg $password mot de passe du joueur
     * @arg $nom nom du joueur
     * @arg $prenom prenom du joueur
     * @arg $date_inscription date d'inscription du joueur
     * @arg Remarque si le mot de passe est NULL, les données sont chargé automatique grâce au login du joueur
     */
    public function __construct($login, $password = null, $nom = null, $prenom = null, $mail = null) {
        if ($password == NULL) {
            //On demande de charger les données grâce à l'ID
            //On include le DAO
            include_once './dao/user_dao.php';

            //On instancie un nouvel objet DAO
            $dao = new user_dao();

            //On récupère les données
            $data = $dao->select($login);


            //On parse les résultats
            $this->login = $data["login"];
            $this->pwd = $data["pwd"];
            $this->nom = $data["nom"];
            $this->prenom = $data["prenom"];
            $this->email = $data["email"];
            $this->date_inscription = $data["dateinscription"];
        } else {
            //Sinon, on à toutes les infos
            //Chargement des données
            $this->login = $login;
            $this->pwd = $password;
            $this->nom = $nom;
            $this->prenom = $prenom;
            $this->email = $mail;
            $this->date_inscription = time();
        }

        //On ne charge pas les parties pour éviter la surcharge mémoire
        $this->games = NULL;
    }

    /**
     * @brief Retourne le login du joueur
     * @return string
     */
    public function getLogin() {
        return $this->login;
    }

    /**
     * @brief Retourne le hash du mot de passe du joueur
     */
    public function getPassword() {
        return $this->pwd;
    }

    /**
     * @brief Définie le mot de passe du joueur
     * @note la converion en hash MD5 est automatiquement réalisée
     */
    public function setPassword($password) {
        $this->pwd = md5($password);
    }

    /**
     * @brief Obtient le nom du joueur
     * @return string
     */
    public function getNom() {
        return $this->nom;
    }

    /**
     * @brief Définie le nom du joueur
     * @return $nom nom du joueur
     */
    public function setNom($nom) {
        $this->nom = $nom;
    }

    /**
     * @brief Obtient le prénom du joueur
     * @return string
     */
    public function getPrenom() {
        return $this->prenom;
    }

    /**
     * @brief Définie le prénom du joueur
     * @arg $prenom prénom du joueur
     */
    public function setPrenom($prenom) {
        $this->prenom = $prenom;
    }

    /**
     * @brief Obtient les parties jouées par le joueur
     * @return tableau de game ou FALSE si rien
     */
    public function getGames() {
        //Si il n'y a pas de données enregistrées, on fait une requête
        if ($this->games == NULL) {
            //On fait les inclusions nécessaire
            include_once "./dao/game_dao.php";
            include_once "./metier/game.php";

            //On instancie un nouvel objet
            $dao = new game_dao();

            //On récupère les logiciel
            $result = $dao->selectByLogin($this->login);

            //Mise en place d'une variable pour sauvegarder les résultats
            $tmp = array();
            $i = 0;

            //On parse les résultats
            foreach ($result as $row) {
                $tmp[$i] = new game($row["id"], $row["user_login"], $row["length"], NULL);
            }

            //On sauvegarde les résultats dans l'attribut spécifique
            $this->games = $tmp;
        }

        //On renvoie les résultats
        return $this->games;
    }

    /**
     * @brief Obtient l'email de l'utilisateur
     * @return string
     */
    public function getMail() {
        return $this->email;
    }

    /**
     * @brief Définie l'email de l'utilisateur
     * @arg $mail email de l'utilisateur
     * @note la vérification se fera en javascript
     */
    public function setMail($mail) {
        $this->email = $mail;
    }

    /**
     * @brief Obtient si l'objet est NULL
     * @return bool
     */
    public function isNull() {
        if ($this->login != NULL) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    /*
     * @brief Sauvegarde un utilisateur dans la base de données
     */
    public static function saveUser($user) {
        //On include le DAO pour savegarder l'utilisateur
        include_once './dao/user_dao.php';

        //On instancie un nouvel objet
        $dao = new user_dao();

        //On demande la sauvegarde
        if (!$dao->update($user)) {
            $dao->insert($user);
        }
    }

    public static function saveUserNoPassword($user) {
        //On include le DAO pour savegarder l'utilisateur
        include_once './dao/user_dao.php';

        //On instancie un nouvel objet
        $dao = new user_dao();

        //On demande la sauvegarde
        $dao->updateNoPassword($user);
    }

    public static function exist($login) {
        //On include le DAO pour savegarder l'utilisateur
        include_once './dao/user_dao.php';

        //On instancie un nouvel objet
        $dao = new user_dao();

        $tmp = $dao->select($login);

        if ($tmp == NULL) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

}

?>
