<?php

namespace Controllers;

use Bases\Controller;
use Models\Categorie;
use Models\Menu;
use Models\Tag;
use Utils\Upload;

class MenuController extends Controller
{

    /**
     * Affiche la page des plats du menu
     */
    public function index()
    {
    
    $menus = (new Menu)->tout();
    $tout_categories = (new Categorie)->toutCategories();

    $this->vue("menus/index", [
        "menus" => $menus,
        "tout_categories" => $tout_categories
    ]);
    }

    /**
     * Affiche le formulaire pour creer un plat
     */
    public function create()
    {
        $categories = (new Categorie)->toutCategories();

        $tags = (new Tag)->toutTags();
        $this->vue("menus/create", [
            "categories" => $categories,
            "tags" => $tags
        ]);
    }

    /**
     * Traite l'ajout d'un nouveau plat du menu
     */
    public function store()
    {
        // Protection de la route
        if (empty($_SESSION["role"])) {
            $this->rediriger("menus");
        }

        // Validation des champs obligatoires
        if (
            empty($_POST["nom"]) ||
            empty($_POST["description"]) ||
            empty($_POST["prix"]) ||
            empty($_POST["categorie"]) ||
            empty($_POST["tags"])
        ) {
            $this->rediriger("admin-menu-creer?infos_requises");
        }

        // Traitement de l'image
        $image = null;
        if (!empty($_FILES["image"])) {
            $upload = new Upload("image");
            $image = $upload->placerDans("uploads");
        }

        $modele_menu = new Menu;

        $succes_menu = $modele_menu->insererMenu(
            $_POST["nom"],
            $_POST["description"],
            $_POST["prix"],
            $image,
            $_POST["categorie"]
        );

        $succes_menu_tag = $modele_menu->insererMenuTag(
            $_POST["tags"]
        );

        if (!$succes_menu || !$succes_menu_tag) {
            $this->rediriger("admin-menu-creer?echec_ajout_plat");
        }

        $this->rediriger("employes-menu?succes_ajout_plat");
    }


    /**
     * Affiche le formulaire pour creer un plat
     */
    public function edit()
    {
        // Protection de la route
        if (empty($_SESSION["role"])) {
            $this->rediriger("menus");
        }

        // Si on tente d'aller sur la page de modification sans avoir envoyé de id en $_GET
        if (empty($_GET["id"])) {
            $this->rediriger("employes-menu");
        }

        $categories = (new Categorie)->toutCategories();
        $tags = (new Tag)->toutTags();
        $menu_tags = (new Tag)->tagSelonPlat($_GET["id"]);
        $menu = (new Menu)->menuParId($_GET["id"]);

       /*  var_dump($menu_tags);
        exit(); */

        $this->vue("menus/edit", [
            "categories" => $categories,
            "tags" => $tags,
            "menu_tags" => $menu_tags,
            "plat" => $menu
        ]);
    }

    /**
     * Traite la modification d'un plat du menu
     */
    public function update()
    {
        // Protection de la route
        if (empty($_SESSION["role"])) {
            $this->rediriger("menus");
        }

        // Validation des champs $_POST obligatoire
        if (
            empty($_POST["nom"] ||
                empty($_POST["description"]) ||
                empty($_POST["prix"]) ||
                empty($_POST["categorie"]) ||
                empty($_POST["tags"])) /* Recois un tableau de tags */
        ) {
            $this->rediriger("admin-menu-modifier?infos_requises");
        }

        /* var_dump($_POST);
        exit(); */

        // Traitement de l'image
        $image = null;
        if (!empty($_FILES["image"])) {
            $upload = new Upload("image");
            $image = $upload->placerDans("uploads");
        }

        $succes = (new Menu)->modifierMenu(
            $_POST["id"],
            $_POST["nom"],
            $_POST["description"],
            $_POST["prix"],
            $image,
            $_POST["categorie"],
            /* $_POST["tags"] Pour modifier plusieurs tags*/ 
        );

        if (!$succes) {
            $this->rediriger("admin-menu-modifier?echec_modification");
        }

        $this->rediriger("employes-menu?succes_modification");
    }

    /**
     * Traite la suppression d'un plat du menu
     */
    public function delete()
    {
        // Protection de la route
        if (empty($_SESSION["role"])) {
            $this->rediriger("menus");
        }

        $modele_menu = new Menu;

        $succes_menu_tag = $modele_menu->supprimerMenuTag($_GET["id"]);
        $succes_menu = $modele_menu->supprimerMenu($_GET["id"]);

        if (!$succes_menu_tag || !$succes_menu) {
            $this->rediriger("employes-menu?erreur_suppression_plat");
        }

        $this->rediriger("employes-menu?succes_suppression_plat");
    }
}
