<?php

namespace App\controleur;

use App\gateway\Connection;
use App\gateway\ImageGateway;
use App\gateway\OffreGateway;
use App\metier\Image;
use App\modele\OffreModele;
use App\modele\ImageModele;
use App\TwigExtensions;
use finfo;

class UtilisateurControleur
{
    public function __construct()
    {
        global $twig;
        if (!isset($_REQUEST["action"])) {
            //$action = NULL;
            $action = "consultOffers";
        } else {
            $action = \App\config\Validation::nettoyerString($_REQUEST["action"]);
        }
        switch ($action) {
            case NULL:
            case "accueil":
                $this->accueil();
                break;
            case "connection":
                $this->connection();
                break;
            case "inscription":
                $this->inscription();
                break;
            case "consultOffers":
                $this->consultOffers();
                break;
            case "consulterProfilLimite":
                $this->consulterProfilLimite();
                break;
            case "creerOffre":
                $this->creerOffre();
                break;
            case "displayOffer":
                $this->displayOffer();
                break;
            default:
                $dVueErreur[] = "Action inconnue ou non autorisée";
                echo $twig->render("erreur.html", ['dVueErreur' => $dVueErreur]);

        }
    }

    protected function connection()
    {
        global $twig;
        echo $twig->render('connexion.html', []);
    }

    protected function inscription()
    {
        global $twig;
        $dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant

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


            // Validez les données d'inscription, par exemple, vérifiez si l'email est unique
            // Vous pouvez également effectuer d'autres validations nécessaires

            $userModel = new \App\modele\UtilisateurModele();
            $nouvelUtilisateur = $userModel->inscription($email, $motDePasse);

            // Si l'inscription a réussi, redirigez l'utilisateur vers une page de confirmation
            // Vous pouvez également gérer les erreurs ici en cas d'échec de l'inscription

            if ($nouvelUtilisateur instanceof \App\metier\Alumni) {
                // L'inscription a réussi, redirigez l'utilisateur vers une page de confirmation
                // par exemple :
                header('Location: index.php?action=inscription_success');
                exit();
            } else {
                // L'inscription a échoué, ajoutez un message d'erreur
                $dVueErreur[] = "L'inscription a échoué, veuillez réessayer.";
            }
        }

        // Affichez le formulaire d'inscription ou les erreurs le cas échéant
        echo $twig->render('inscription.html', ['dVueErreur' => $dVueErreur]);
    }

    protected function accueil()
    {
        global $twig;
        echo $twig->render('accueil.html', []);
    }

    protected function consulterProfilLimite()
    {
        //TODO
    }

    protected function consultOffers()
    {
        $offerMdl = new OffreModele();
        global $twig;
        $twig->addExtension(new TwigExtensions()); // Ajouter l'extension personnalisée à l'environnement Twig

        $offers = $offerMdl->getOffers();

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

    protected function creerOffre()
    {

        global $twig;
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $requiredFields = ['name', 'entreprise', 'description','typeContrat', 'descriptPoste', 'profilRecherche', 'choixExp', 'education', 'mail', 'num'];

            foreach ($requiredFields as $field) {
                if (empty($_POST[$field])) {
                    echo $twig->render("creerOffre.html", ['errMsg' => $field]);
                    return;
                }
            }
        }
        if (isset($_FILES['image'])) {
            $typesMime = array('image/jpeg', 'image/png', 'image/gif', 'image/bmp','image/webp');

            $file = $_FILES['image']['tmp_name'];

            $mime = mime_content_type($file);

            if (in_array($mime, $typesMime)) {
                $imgMdl = new ImageModele;
                $img = $imgMdl->publierImage();
                $offerMdl = new OffreModele();
                $offer = $offerMdl->publishOffers($img);
                $id = $offer->getImgId();
                // TO DO Afficher vue succès
                //echo $twig->render("index.php?action=displayOffer&id=${id}",[]);
                return;
            }
            else
            {
                $imgName = $_FILES['image']['name'];
                echo $twig->render("CreerOffre.html", ['errMsg' => "Image {$imgName} non valide !" ]);
                return;
            }
        }
        echo $twig->render("CreerOffre.html",[]);
    }

    protected function testAction()
    {
        echo "test action ";
        $con = new Connection("mysql:host=localhost;dbname=dbAlica", 'test', 'test');
        $offreGw = new OffreGateway($con);

        if ($offreGw->getMaxid() == NULL)
            echo "max id == NULL";
        else echo "max id != NULL";
    }

    public function displayOffer()
    {
        global $twig;

        if (isset($_GET["id"]) && intval($_GET["id"]) != null)
        {
            $offreMdl = new OffreModele();

            $offre = $offreMdl->getOfferFromId(intval($_GET["id"]));
            if($offre != NULL)
            {
                echo $twig->render("OffreDetailTest.html",['offre' => $offre]);
                return;
            }

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


}