<?php

/**
 * @brief Représente un objet d'accès à la base de données relatif à l'objet game
 */

class game_dao extends dao {
    
    /**
     * @brief Récupère un objet de game
     * @arg $id identifiant de la partie à récupérer
     */
    public function select($id) {
        //Mise en place de la requête
        $query = "SELECT * FROM `game` WHERE `id`='$id'";

        //On récupère les données
        $result = $this->db->query($query)->fetch();

        //On retourne l'objet frâichement crée
        return $result;
    }

    /**
     * @brief Récupère toutes les partie relatives à un joueur
     * @arg $login login du joueur permettant de récupérer les partie qui lui sont associée
     * @return tableau de lignes de la base de données ou FALSE
     */
    public function selectByLogin($login) {
        //Mise en place de la requête
        $query = "SELECT * FROM `game` WHERE `user_login`='$login' ORDER BY date DESC";

        //On récupère les données
        $result = $this->db->query($query)->fetchAll();

        //On retourne les données
        return $result;
    }

    /**
     * @brief Compte le nombre de jeux effectués par chaque joueurs
     */
    public function countGame() {
        //Création de la requête
        $query = "SELECT COUNT(*) AS nb, user_login FROM game GROUP BY user_login ORDER BY user_login ASC";

        //Récupération des données
        $result = $this->db->query($query)->fetchAll();

        //On retourne les données
        return $result;
    }

    /**
     * @brief Insert une occurence game relative à l'objet passé
     * @arg $objet objet game à ajouter dans la base de données
     */
    public function insert(&$objet) {
        //On stocke les données à ajouter
        $user = $objet->getUserLogin();
        $length = $objet->getLength();

        //On met en place la requête
        $query = "INSERT INTO `game`(`user_login`,`length`, `date`) VALUES ('$user','$length', NOW())";

        //On envoie la requête
        try {
            $this->db->query($query);
            return TRUE;
        } catch (Exception $ex) {
            if (config::$debug) {
                echo $ex->getMessage();
            }

            return FALSE;
        }
    }

    /**
     * @brief Fonction obsolète
     * @note il est impossible de faire une mise à jour d'une partie via le site
     */
    public function update(&$objet) {
        //On ne fait rien
    }

    /**
     * @brief Supprime une occurence game de la base de données
     * @arg $id identifiant de la partie à supprimer
     * @note on utilise le ON DELETE CASCADE pour supprimer les réponses associées. La BDD reste donc cohérente
     */
    public function delete($id) {
        //Mise en place de la requête SQL
        $query = "DELETE FROM `game` WHERE `id`='$id'";

        //On envoie la requête SQL
        $result = $this->db->query($query);

        //On renvoie si oui ou non on a réussi la requête
        if ($result->rowCount() == 0) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    public function getLastId() {
        //Mise en place de la requête SQL
        $query = "SELECT MAX(id) FROM game LIMIT 1";

        //On envoie la requête SQL
        $result = $this->db->query($query)->fetch();

        //On retourne le résultat
        return $result;
    }


}

?>