/**
 * Fonction servant à activer un nouvel utilisateur à l'aide de son code d'activation fourni dans l'url.
 * Si le code n'existe pas, il envoie un message d'erreur, sinon il active le membre et le redirige vers la page de connexion.
 */
function activationNewUser()
{
    $code = $_GET['code'];
    $am = new ActivationManager(connexionDb());
    $ac = $am->getActivationByCode($code);
    $noCode = false;
    if ($ac->getCode() == NULL) {
        $noCode = true;
    }
    if ($noCode) {
        echo "Votre code est incorrect, utilisez celui du mail prévu à cet effet !";
    } else {
        $am->deleteActivation($ac);
        echo "Vous êtes dorénavant activé, vous pouvez vous connecter normalement !";
        echo "<meta http-equiv='refresh' content='2; URL=connexion.page.php'>";
    }
}
/**
 * Fonction ajoutant en BDD le nouveau membre inscrit et lui envoyant un message contenant son code d'activation
 * d'inscription.
 */
function addDB()
{
    $userToAdd = new User(array("UserName" => $_POST['userName'], "email" => $_POST['email'], "Mdp" => $_POST['mdp']));
    $code_aleatoire = genererCode();
    $adresseAdmin = "*****@*****.**";
    $to = $userToAdd->getEmail();
    $sujet = "Confirmation de l'inscription";
    $entete = "From:" . $adresseAdmin . "\r\n";
    $entete .= "Content-Type: text/html; charset=utf-8\r\n";
    $message = "Nous confirmons que vous êtes officiellement inscrit sur le site EveryDayIdea <br>\n\t\t\t\t\t\t\t\t\tVotre login est : " . $userToAdd->getUserName() . " <br>\n\t\t\t\t\t\t\t\t\tVotre email est : " . $userToAdd->getEmail() . " <br>\n\t\t\t\t\t\t\t\t\tVotre lien d'activation est : <a href='http://www.everydayidea.be/Page/activationInscription.page.php?code=" . $code_aleatoire . "'>Cliquez ici !</a>";
    mail($to, $sujet, $message, $entete);
    /** @var $um : un nouvel user qui va être ajouté à la BDD
        J'ajoute le nouvel user à la BDD*/
    $um = new UserManager(connexionDb());
    $um->addUser($userToAdd);
    /**
     * Ici j'ai besoin de savoir quel est le user id du nouveau membre ajouté pour pouvoir le mettre dans l'ajout du code d'activation de cet user
     * Donc je vais le rechercher en base de donnée où il vient d'être ajouté
     */
    $user = $um->getUserByUserName($userToAdd->getUserName());
    $userid = $user->getId();
    $um->setUserDroit($user, 4);
    /**
     * J'ajoute le nouveau code d'activation à la BDD
     */
    $am = new ActivationManager(connexionDb());
    $activation = new Activation(array("code" => $code_aleatoire, "id_user" => $userid, "libelle" => "Inscription"));
    $am->addActivation($activation);
}
/**
 * Si le user a rempli le formulaire de changement de mdp, la fonction regarde si le login correspond au user
 * possédant ce code d'activation et si cela est vrai, il change son mdp en bdd et delete son code d'activation en BDD
 */
function changementMdp()
{
    if (isset($_POST['userName']) && isset($_POST['mdp']) && $_POST['mdp'] == $_POST['verifmdp'] && goodCode()) {
        $code = $_GET['code'];
        $mdp = $_POST['mdp'];
        $userName = $_POST['userName'];
        $am = new ActivationManager(connexionDb());
        $ac = $am->getActivationByCodeAndLibelle("Récupération", $code);
        $userId = $ac->getIdUser();
        $um = new UserManager(connexionDb());
        /**
         * Je récupère cet user grâce à l'id du user possédant le code d'acti
         */
        $userRecup = $um->getUserById($userId);
        /**
         * Je récupère l'autre user grâce au login qu'il a encodé dans le formulaire
         */
        $userTest = $um->getUserByUserName($userName);
        /**
         * Je compare les deux users pour voir si ce sont les mêmes
         */
        if ($userTest->getUserName() != $userRecup->getUserName()) {
            echo "<section class='row'>";
            echo "<br><br><br><br><br><br><br><br><br><br><br><br><div class='alert alert-danger' role='alert'>Votre nom d'utilisateur ne correspond pas à l'utilisateur possédant ce code d'activation !</div>";
            echo "</section>";
        } else {
            $userRecup->setMdp($mdp);
            $am->deleteActivation($ac);
            $um->updateUserMdp($userRecup);
            echo "<br><br><br><br><br><br><br><br><br><br><br><br><div class='alert alert-success' role='success'>Votre mot de passe a bien été modifié, vous pouvez vous connecter !</div>";
            echo "<meta http-equiv='refresh' content='2; URL=connexion.page.php'>";
        }
    }
}
/**
 * Fonction vérifiant l'identité du membre et le connectant si il possède la bonne identité.
 * @return array : tableau de message d'erreur dans le cas où ses informations sont fausses, si il est banni ou encore
 * si il ne s'est pas activé.
 */
function doConnect()
{
    $tabRetour = array();
    $mdp = $_POST['mdp'];
    $userName = $_POST['userName'];
    $manager = new UserManager(connexionDb());
    $tabUser = $manager->getAllUser();
    $userToConnect = new User(array("UserName" => $userName, "Mdp" => $mdp));
    $userFound = $manager->getUserByUserName($userName);
    /**
     * Je vérifie sur le user est dans la base de donnée et existe bel et bien
     */
    $echec = false;
    if ($userFound->getId() != NULL) {
        foreach ($tabUser as $elem) {
            //$mdp == hash("sha256", $elem->getMdp());
            //password_verify($mdp, $elem->getMdp())
            if ($userName == $elem->getUserName() && hash("sha256", $userToConnect->getMdp() . $userFound->getSalt()) == $elem->getMdp()) {
                $echec = false;
                $userToConnect = $elem;
                $id = $elem->getId();
                break;
            } else {
                $echec = true;
            }
        }
    } else {
        $echec = true;
    }
    /**
     * Je vérifie que le user n'a pas besoin de s'activer avant de se connecter, l'user pouvant avoir
     * deux code (inscription et mdp oublié), je vérifie que c'est bien le code d'inscription
     */
    $needActi = false;
    $banni = false;
    if (isset($id)) {
        $acManager = new ActivationManager(connexionDb());
        $act = $acManager->getActivationByLibelleAndId("Inscription", $id);
        if (isset($act) && $act->getCode() != NULL) {
            $needActi = true;
        } else {
            $needActi = false;
        }
    }
    $userToConnect = $manager->getUserById($userToConnect->getId());
    if ($echec == true) {
        $tabRetour['Error'] = "<div class='alert alert-danger' role='alert'>Erreur lors de la connexion, veuillez rééssayer avec le bon login ou mot de passe !</div>";
    } else {
        if ($userToConnect->getDroit()[0]->getId() == 6) {
            $tabRetour['Error'] = "<div class='alert alert-danger' role='alert'>Vous êtes banni, impossible de vous connecter !</div>";
            $banni = true;
        } else {
            if ($needActi == true) {
                $tabRetour['Activation'] = "<div class='alert alert-danger' role='alert'>Vous devez activer votre compte avant la connexion !</div>";
            } else {
                $user = $manager->getUserById($id);
                $manager->updateUserConnect($user);
                //$_SESSION['User'] = $user;
                setSessionUser($user);
                echo "Bienvenue sur EveryDayIdea !";
            }
        }
    }
    $tabRetour['Retour'] = !$echec;
    $tabRetour['Valide'] = !$needActi;
    $tabRetour['Banni'] = !$banni;
    return $tabRetour;
}