<?php

namespace App\controleur;

use App\config\Validation;
use App\gateway\ImageSaver;
use App\metier\Alumni;
use App\modele\OffreModele;
use App\modele\UtilisateurModele;

class UtilisateurControleur
{

    }

    public function connection()
    {
        global $twig;
        $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant
        $userModel = new UtilisateurModele();

        if (isset($_POST['email'], $_POST['password'])) {
            $email = Validation::nettoyerString($_POST['email']);
            $motDePasse = Validation::nettoyerString($_POST['password']);

            $utilisateur = $userModel->connection($email, $motDePasse);

            if ($utilisateur instanceof Alumni) {
                $_SESSION['utilisateur'] = $utilisateur;
                header('Location: accueil');
                exit();
            } else {
                $dVueErreur[] = "L'adresse email ou le mot de passe est incorrect.";
            }
        }
        echo $twig->render('connection.html', ['dVueErreur' => $dVueErreur]);
    }

    public function inscription()
    {

        global $twig;
        $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant
        $userModel = new UtilisateurModele();

        if (isset($_POST['firstname'],$_POST['name'], $_POST['email'], $_POST['password'])) {
            $nom = Validation::nettoyerString($_POST['name']);
            $prenom = Validation::nettoyerString($_POST['firstname']);
            $email = Validation::nettoyerString($_POST['email']);
            $motDePasse = Validation::nettoyerString($_POST['password']);
            $hash = password_hash($motDePasse, PASSWORD_DEFAULT);

            // verification que l'email est valide et unique :
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $dVueErreur[] = "L'adresse email n'est pas valide ou est déjà utilisée.";
            } else {
                $utilisateur = $userModel->getUtilisateurByEmail($email);
                if ($utilisateur instanceof Alumni) {
                    $dVueErreur[] = "L'adresse email est déjà utilisée.";
                }
            }
            $nouvelUtilisateur = $userModel->inscription($prenom,$nom,$email, $hash);

            if ($nouvelUtilisateur instanceof Alumni) {
                echo $twig->render('inscription_success.html');
                exit();
            } else {
                $dVueErreur[] = "L'inscription a échoué, veuillez réessayer.";
            }
        }
        echo $twig->render('inscription.html', ['dVueErreur' => $dVueErreur]);
    }

    protected function accueil()
    {
        global $twig;
        // Ajout d'un var_dump pour déboguer
        if (isset($_SESSION['utilisateur']) && $_SESSION['utilisateur'] instanceof Alumni) {
            $prenom = $_SESSION['utilisateur']->getPrenom();
            $nom = $_SESSION['utilisateur']->getNom();
            $id = $_SESSION['utilisateur']->getId();
        }
        else{
            $prenom =  null;
            $nom = null;
            $id = null;
        }
        $userModel = new UtilisateurModele();
        $evenements=$userModel->getEvenement();
        //aller sur la page d'accueil avec le nom et prenom de l'utilisateur
        echo $twig->render('accueil.html', ['prenom' => $prenom, 'nom' => $nom, 'id' => $id,"eventsList"=>$evenements]);
    }

    public function consulterProfilLimite()
    {
        //TODO
        echo 'not implemented yet';
    }

    public function consultOffers()
    {

        $userMdl = new UtilisateurModele();
        global $twig;

        $niveauEtudes=null;
        $typeContrat=null;
        $exp = null;

        $role = NULL;
        if(isset($_SESSION['utilisateur']))
        {
            $role = $_SESSION['utilisateur']->getRole() ;
        }


        $nbOffers = 5 ;

        if(isset($_GET["niveauEtudes"]) && Validation::validateTypeStudies($_GET["niveauEtudes"])) {
            $niveauEtudes = $_GET["niveauEtudes"];
        }

        if(isset($_GET["typeContrat"]) && Validation::validateTypeContract($_GET["typeContrat"])) {
            $typeContrat = $_GET["typeContrat"];
        }

        if(isset($_GET["experience"]) && Validation::validateExperience($_GET["experience"])) {
            $exp = $_GET["experience"];
        }

        if ($niveauEtudes == null && $typeContrat == null && $exp == null) {
            $totalOffers = $userMdl->getNbOffers();
        } else {
            $params = array(
                'typeContrat' => $typeContrat,
                'exp' => $exp,
                'niveauEtudes' => $niveauEtudes,
                'role' => $role
            );
            $offers = $userMdl->getOffersWithFilters($params);
            $totalOffers = count($offers);
        }

        $numberPages = ceil($totalOffers / 5);

        $msg = NULL;
        if($numberPages == 0 ) {
            $msg = 'Aucune Offre Trouvée';
        }

        if (isset($_GET["page"]) && intval($_GET["page"]) != null) {
            $page = intval($_GET["page"]);
            if ($page > $numberPages || $page < 1) {
                $dVueErreur[] = "Page introuvable";
                echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur ]);
                return;
            }
        } else {
            $page = 1;
        }

        $start = intval(($page - 1) * 5);

        if ($niveauEtudes == null && $typeContrat == null && $exp == null) {
            $offers = $userMdl->getOfferLimit($start, $nbOffers);
        } else {
            $params['start'] = $start;
            $params['nbOffers'] = 5;
            $offers = $userMdl->getOffersWithFilters($params);
        }

       /* echo "filtre :".$niveauEtudes."<br>";
        echo "filtre :".$typeContrat."<br>";
        echo "filtre :".$exp."<br>";*/

        echo $twig->render('OffersList.html', [
            'msg' =>   $msg,
            'offres' => $offers,
            'numberPages' => $numberPages,
            'currentPage' => $page,
            'typeContrat' => (($typeContrat != null) ? $typeContrat : ""),
            'experience' => (($exp != null) ? $exp : ""),
            'niveauEtudes' => (($niveauEtudes != null) ? $niveauEtudes : ""),
            'valContrat' => (($typeContrat != null) ? "&typeContrat=".$typeContrat : ""),
            'valExp' => (($exp != null) ? "&experience=".$exp : ""),
            'valEtudes' => (($niveauEtudes != null) ? "&niveauEtudes=".$niveauEtudes : ""),
            'role' => $role
        ]);
    }

    public function createOfferForm()
    {
        global $twig;
        echo $twig->render("CreerOffre.html", []);
    }

    public function createOffer()
    {
        global $twig;
        $taberror = [];

        $requiredFields = ['name', 'entreprise', 'description','typeContrat', 'descriptPoste', 'profilRecherche', 'choixExp', 'education', 'mail', 'num'];

        $error = false;
        foreach ($requiredFields as $field) {
            if (empty($_POST[$field])) {
                $error = true;
                $taberror[] = "Le champ {$field} est requis !";
            }
        }
        if($error)
        {
            echo $twig->render("CreerOffre.html", ['tabError' => $taberror ]);
            return;
        }

        if(!Validation::verifierEmail($_POST["mail"]))
        {
            //echo $twig->render("CreerOffre.html", ['errMsg' => "Email non valide !" ]);
            $taberror[] = "Email non valide !";
        }

        if(!Validation::validateNumber($_POST["num"]))
        {
            $taberror[] = "Numero non valide !";
            //echo $twig->render("CreerOffre.html", ['errMsg' => "Numero non valide !" ]);
        }


        if (!Validation::validateImage("image"))
        {
            if(isset($_FILES['image']['name'])) {$taberror[] = "Image non valide !";}
            else {$taberror[] = "Inserez une image !";}
        }
        if(!Validation::validateImage("logo")) {
            if(isset($_FILES['logo']['name'])) {$taberror[] = "Logo non valide !";}
            else {$taberror[] = "Inserez un logo !";}
            return;
        }

        if(count($taberror) > 0)
        {
            echo $twig->render("CreerOffre.html", ['tabError' => $taberror ]);

        }
        else{
            $saveImg1 = ImageSaver::SaveImage("image");
            $saveImg2 = ImageSaver::SaveImage("logo");
            if($saveImg1[0] && $saveImg2[0]) {
                $mbrModel = new MembreModele();


                $offre = $mbrModel->publishOffer($saveImg1[1], $saveImg2[1]);

                echo $twig->render("OffreDetailTest.html", ['offre' => $offre]);
            }
            else
            {
                $taberror[] = "Erreur lors de l'upload des images";
                echo $twig->render("CreerOffre.html", ['tabError' => $taberror ]);
            }
        }
    }

    public function displayOffer(?array $params)
    {
        global $twig;

        if (isset($params['id']) && intval($params['id']) != null)
        {
            $uttilsMdl = new UtilisateurModele();
            $offre = $uttilsMdl->getOfferFromId(intval($params["id"]));
            if($offre != NULL)
            {
                echo $twig->render("OffreDetailTest.html",['offre' => $offre]);
                return;
            }
        }
        $dVueErreur[] = "Erreur, Offre introuvable";
        echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur]);
    }

    public function listerEvenement()
    {
        $mdl = new UtilisateurModele();
        $evenements = $mdl->getEvenement();
        global $twig;

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

    public function creerEvenement()
    {
        global $twig;

        if (isset($_FILES["image"])) {
            $img = ImageSaver::SaveImage('image');

            if (!Validation::validerEvenement($_POST["titre"], $_POST["description"], $_POST["date"], $_POST["nbPlaceMax"], $img[1])) {
                $mdl = new UtilisateurModele();
                $mdl->ajouterEvenement($_POST["titre"], $_POST["description"], $_POST["date"], $_POST["nbPlaceMax"], $img[1]);

                $this->listerEvenement();
            } else {
                $dVueErreur[] ="Erreur lors de la création de l'évènement";
                echo $twig->render("erreur.html",['dVueErreur' => $dVueErreur]);
            }
        } else {
            echo $twig->render('creerEvenement.html', []);
        }
    }

    public function supprimerEvenement(?array $params)
    {
        $mdl = new UtilisateurModele();
        $mdl->deleteEvenement($params["id"]);

        $this->listerEvenement();
    }
    
    public function avoirDetailEvenement(?array $params)
    {
        $mdl = new UtilisateurModele();
        global $twig;

        if(isset($params['id']))
        {
            $evenement = $mdl->getEvenementById($params['id']);


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


    }

    public function rechercherEvenement()
    {
        $mdl = new UtilisateurModele();
        $evenements = $mdl->getEvenement();

        if (isset($_POST["recherche"]) and !empty($_POST["recherche"])) {
            $recherche = Validation::nettoyerString($_POST["recherche"]);
            $evenements = $mdl->getEvenementByTitre($recherche);
        }

        global $twig;
        echo $twig->render('evenement.html', ['evenements' => $evenements]);
    }

    private function getProfilByPage()
    {
        global $twig;
        $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant
        $userModel = new UtilisateurModele();

        if (isset($_GET['page'])) {
            $page = Validation::nettoyerString($_GET['page']);
            $utilisateurs = $userModel->getUtilisateurByPage($page);

            if ($utilisateurs[0] != null) {
                echo $twig->render('profil.html', [
                    'utilisateurs' => $utilisateurs,
                    'page' => $page]
                );
            } else {
                $dVueErreur[] = "L'utilisateur n'existe pas.";
                echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
            }
        } else {
            $dVueErreur[] = "L'utilisateur n'existe pas.";
            echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
        }
    }
}