<?php

namespace Controllers;

use Bases\Controller;
use Models\Categorie;
use Models\Menu;
use Models\Utilisateur;

class UtilisateurController extends Controller
{
    /**
     * Affiche la page de connexion pour Gaston et les utilisateurs            
     * 
     *  
     */
    public function index()
    {
      $this->vue("connexion/index");
    }

    /**
     * Affiche la page de utilisateurs             
     * 
     *  
     */
    public function utilisateurIndex()
    {
       // Récupération de tout le menu
       $menus = (new Menu)->toutMenu();
       $categories = (new Categorie)->toutesCategories();
       $utilisateurs =(new Utilisateur)->toutUtilisateurs();
       $this->vue("utilisateurs/index", [
           "menus" => $menus,
           "categories" => $categories,
           "utilisateurs" => $utilisateurs

       ]);

       
    }

    /**
     * Traite la création d'un compte
     * 
     * 
     */
    public function store()
    {
        // Valider les champs requis pour la création du compte
        if (
            empty($_POST["nom"]) || 
            empty($_POST["courriel"]) || 
            empty($_POST["mot_de_passe"]) 
        ) {
            $this->rediriger("compte-creer?infos_requises");
        }

        // Sauvegarde des informations du compte
        $modele_utilisateur = new Utilisateur;
        $succes = $modele_utilisateur->ajouter(
            $_POST["nom"],
            $_POST["courriel"],
            password_hash($_POST["mot_de_passe"], PASSWORD_DEFAULT)
        );

        if (!$succes) {
            $this->rediriger("compte-creer?echec_ajout");
        }

        $this->rediriger("utilisateur-index?succes_ajout");
    }

    /**
     * Modifier un compte 
     * 
     * 
     */
    public function Update()
    {
        // Route protégée: l'utilisateur doit être connecté et la requête doit être en POST
        if (empty($_SESSION["utilisateur_id"])) {
            $this->rediriger("index");
        }

        // Validation des champs attendus
        if (empty($_POST["id"]) || empty($_POST["nom"]) || empty($_POST["courriel"])) { 
            $this->rediriger("utilisateur-index?info_requises");
        }
        
        // Modifier le compte
        if (!(new Utilisateur)->modifier($_POST["id"], $_POST["nom"], $_POST["courriel"])) {
            $this->rediriger("utilisateur-index?echec_modification");
        }

        $this->rediriger("utilisateur-index?succes_modification");
    }

    /**
     * Supprimer un compte 
     *
     * 
     */
    public function delete()
    {
        $succes = (new Utilisateur)->supprimer($_POST["id"]); //nom ou id pas sur 

        if (!$succes) {
            $this->rediriger("utilisateur-index?echec_suppression");  
        }

        $this->rediriger("utilisateur-index?succes_suppression");
    }

    /**
     * Traite la connexion de l'utilisateur
     * 
     * 
     */
    public function connecter()
    {
        // Vérifie que le nom et le mot de passe sont fournis
        if (empty($_POST["nom"]) || empty($_POST["mot_de_passe"])) {
            $this->rediriger("connexion-index?infos_requises");
        }

        // Trouve l'utilisateur par son nom
        $modele_utilisateur = new Utilisateur; 
        $utilisateur = $modele_utilisateur->parNom($_POST["nom"]);

        // Vérifie l'existence de l'utilisateur et la validité du mot de passe
        if (!$utilisateur || !password_verify($_POST["mot_de_passe"], $utilisateur->mot_de_passe)) {
            //var_dump($utilisateur, $_POST["mot_de_passe"]);
            //exit();
            $this->rediriger("connexion-index?infos_invalides");  
        }
        
        // Enregistre l'ID utilisateur dans la session
        $_SESSION["utilisateur_id"] = $utilisateur->id;
        
        $this->rediriger("utilisateur-index?succes_connexion"); 
    }

    /**
     * Traite la déconnexion de l'utilisateur
     * 
     * 
     */
    public function deconnecter() {
        session_destroy();
        $this->rediriger("index?succes_deconnexion"); //pas sur de la redirection encore juste index ou menu cest juste un details
    }  
}
