<?php

namespace Models;

use Bases\Model;

class Utilisateur extends Model
{
    protected $table = "utilisateurs";


    /**
     * Retourne un utilisateur selon un courriel
     *
     * @param string $courriel
     * @return object|false
     */
    public function parCourriel($courriel)
    {
        // Créer la requête SQL
        $sql = "SELECT $this->table.*, roles.nom AS role 
                FROM $this->table
                JOIN roles
                ON $this->table.role_id = roles.id
                WHERE courriel = :courriel";

        // Préparation de la requête
        $requete = $this->pdo()->prepare($sql);

        // exécution de la requete
        $requete->execute([
            ":courriel" => $courriel
        ]);

        return $requete->fetch();
    }

    /**
     * Retourne tous d'un utilisateur ainsi que le nom de son rôle selon un id
     *
     * @param int $id
     * @return object|false
     */
    public function utilisateurParId($id)
    {
        // Créer la requête SQL
        $sql = "SELECT $this->table.*, roles.nom AS role 
          FROM $this->table
          JOIN roles
          ON $this->table.role_id = roles.id
          WHERE $this->table.id = :id";

        // Préparation de la requête
        $requete = $this->pdo()->prepare($sql);

        // exécution de la requete
        $requete->execute([
            ":id" => $id
        ]);

        return $requete->fetch();
    }

    /**
     * Retourne tous les utilisateurs
     */
    public function toutUtilisateurs()
    {
        $sql = "SELECT 
                    $this->table.*, roles.nom AS role
                FROM 
                    $this->table
                JOIN 
                    roles
                ON  
                    $this->table.role_id = roles.id";

        $requete = $this->pdo()->prepare($sql);

        $requete->execute();

        return $requete->fetchAll();
    }

    /**
     * Insérer un nouvel utilisateur
     *
     * @param string $nom_utilisateur
     * @param string $courriel
     * @param string $mot_de_passe
     * @return bool
     */
    public function inserer($nom, $courriel, $mot_de_passe)
    {
        $sql = "INSERT INTO $this->table
                    (nom, courriel, mot_de_passe)
                VALUES 
                    (:nom, :courriel, :mot_de_passe)";
        
        $requete = $this->pdo()->prepare($sql);

        return $requete->execute([
            ":nom" => $nom,
            ":courriel" => $courriel,
            ":mot_de_passe" => $mot_de_passe
        ]);
    }

    /**
     * Modifier le nom et courriel d'un utilisateur
     *
     * @param int $id
     * @param string $nom
     * @param string $courriel
     * @return bool
     */
    public function modifier($id, $nom, $courriel)
    {
        // Créer la requête SQL
        $sql = "UPDATE $this->table
                SET 
                    nom = :nom, 
                    courriel = :courriel
                WHERE 
                    id = :id";

        $requete = $this->pdo()->prepare($sql);

        $requete->bindParam(":id", $id);
        $requete->bindParam(":nom", $nom);
        $requete->bindParam(":courriel", $courriel);

        return $requete->execute();
    }

    /**
     * Retourne le role de l'utilisateur de la session
     *
     * @param int $id
     * @return int
     */
    public function obtenirRole($id)
    {
        $sql = "SELECT $this->table.role_id
                FROM $this->table
                WHERE $this->table.id = :id";

        $requete = $this->pdo()->prepare($sql);

        $requete->execute([
            ":id" => $id
        ]);

        return $requete->fetch();
    }


    public function supprimer($id)
    {
        $sql = "DELETE FROM $this->table where $this->table.id = :id";

        $requete = $this->pdo()->prepare($sql);

        return $requete->execute([
            ":id" => $id
        ]);
    }
}
