<?php


namespace App\controleur;

use App\router\AltoRouter;
use App\metier\Alumni;

use App\controleur\UtilisateurControleur;
use App\controleur\MembreControleur;
use App\controleur\AdminControleur;

class FrontControleur
{
    public function __construct()
    {


        global $twig;
        session_start();

        $router = new AltoRouter();

        $router->setBasePath('/SAE_2A_FA-Reseau_ALICA/php');

        $router->map('GET', '/', 'UtilisateurControleur');

        $router->map('GET','/[a:action]?','UtilisateurControleur');

        $router->map('POST','/[a:action]?','UtilisateurControleur');

        $router->map('GET','/[a:action]/[i:id]?','UtilisateurControleur');

        $router->map('GET|POST', '/user/[i:id]/[a:action]?', 'MembreControleur');

        $router->map('GET|POST', '/admin/[i:id]/[a:action]?', 'AdminControleur');

        $id = 0;

        $match = $router->match();

        $action = array();

        $id = array();

        $twig->render("accueil.html",[]);

        if (!$match) {

            $dVueErreur[] = "Error 404 Page not found";
            echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur]);
        }

        if ($match) {

            $controller = $match['target'] ?? NULL;
            $action = $match['params']['action'] ?? NULL;
            $id = $match['params']['id'] ?? NULL;

            //var_dump($match);

            try {
                if ($controller == "MembreControleur") {
                    if ($_SESSION["utilisateur"]->getRole() != "Admin" || $_SESSION["utilisateur"]->getRole() != "Membre") {

                        echo $twig->render("connection.html",['msg' => 'Vous devez vous connecter pour effectuer cette action']);
                    }
                }

                if ($controller == "AdminControleur") {
                    $Alumni = $_SESSION["utilisateur"];
                    if ($Alumni->getRole() != "Admin") {
                        $dVueErreur = ["Erreur : Vous n'avez pas les privileges pour cette action"];

                        global $twig;
                        echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
                        return;
                    }
                } else {
                    $namespace = 'App\\Controleur\\';
                    $controller = $namespace . $controller;
                    $controller = new $controller();
                }

                if (is_callable(array($controller, $action))) {

                    call_user_func(array($controller, $action), $match['params']);
                } else {

                    $dVueErreur = ['Erreur : Action inconnue'];

                    echo $twig->render('accueil.html', ['dVueErreur' => $dVueErreur]);
                }

            } catch (Error $error) {
                $dVueErreur = ['Erreur : Action inconnue'];



                echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
            }
        }
    }

}
