<?php

//phpinfo();
//exit(0);

set_include_path(
    implode(
        PATH_SEPARATOR,
        array(
            './application/controllers/',
            './application/functions/',
            './application/models/',
            './application/models/dao/',
            './application/views/',
            get_include_path()
        )
    )
);
require_once('vendor/autoload.php');

$configuration = parse_ini_file("./application/configs/application.ini");
$applicationName = $configuration['application.name'];

// Maintenance
// if (!in_array($_SERVER['REMOTE_ADDR'], [
//     /*Local*/"127.0.0.1", 
//     /*SFR Orvault*/"93.28.241.227", 
//     /*Lydie*/"92.184.96.40", 
//     /*Docusign*/"185.81.101.11", 
//     /*Docusign*/"185.81.100.7"
//     ])) {
//     erreur(503);
// }

// Paramétrage des sessions/cookie
$lifetime = $configuration['session.lifetime'];
ini_set('session.gc_maxlifetime', $lifetime);
ini_set('session.sid_length', $configuration['session.sid_length']);
ini_set('session.save_path', './sessions'); // Dossier où sont stockées les sesssions sur le serveur
session_set_cookie_params(0); // Les cookies restent valides côté client jusqu'à ce que le navigateur soit fermé
session_start();

// Gestion des erreurs (en production, on n'affiche rien)
error_reporting(0);
ini_set("display_errors", 0);

// Si http au lieu de https
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
    $location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    redirect($location);
}

if (isset($_GET['controller'])) {
    $controller = $_GET['controller'];
    if (isset($_GET['action'])) {
        $action = $_GET['action'];
    } else {
        $action = "index";
    }
    $ControllerClass = ucfirst($controller).'Controller';
    $actionMethod = $action.'Action';

    @include_once($ControllerClass.'.php');

    if (class_exists($ControllerClass)) {
        
        try {

            $controllerInstance = new $ControllerClass();   

            if ($controllerInstance != null && method_exists($controllerInstance, $actionMethod)) {
                // Gestion des erreurs (en recette, on affiche tout sauf les "notices")
                if (!$controllerInstance->isProduction()) {
                    error_reporting(E_ALL ^ E_NOTICE);
                    ini_set("display_errors", E_ALL ^ E_NOTICE);
                }

                $controllerInstance->log($controller, $action);
                $controllerInstance->$actionMethod();
                if (!empty($_POST["action_complementaire"])) {
                    $actionComplementaireMethod = toCamelCase($_POST["action_complementaire"]).'ActionComplementaire';
                    $controllerInstance->$actionComplementaireMethod();
                }
                $view = './application/views/'.$controller.'/'.$action.'.phtml';
                if (file_exists($view)) {
                    $controllerInstance->renderView($view);
                }
                exit(0);
            }

        } catch (Error $error) {
            $message = prepareError($error);
            $logDao = new LogDao();
            $logDao->updateErreur($controllerInstance->idLog, 400, json_encode($message));
            erreur(400, $message, $controllerInstance->idLog);
        }
    }
}

if (isset($_SESSION['utilisateur']) && isset($_SESSION['modules'])) {
    if ($controller == "index.php" && $action == "index") {
        // On cherche le premier module autorisé
        foreach ($_SESSION['modules'] as $module) {
            if ($module->visible == 1) {
                redirect('/'.$module->lien);
            }
        }
    }
    erreur(404);
} else {
    redirect('/utilisateur/login');
}
session_write_close();
