<?php
namespace Modules\Index\Controller;

use Helpers\Outil\Outils;
use Helpers\Session\InitSession;
use Modules\Administration\Repository\GestionUtilisateurOxalink;
use Modules\Index\Service\SessionService;
use Modules\Index\Service\TableauDeBordService;
use Modules\Panier\Service\PanierEnteteService;
use Skeleton\Controller\Controller;
use Entity\Model\Langues;
use Helpers\Outil\Sql;
use GuzzleHttp\Psr7\Response;
use Helpers\Outil\Captcha;
use Modules\Index\Repository\Connexion;
use Modules\Index\WebService\Utilisateur;
use Modules\Index\Outil\OutilConnexion;
use Modules\Panier\Repository\PanierLigne;
use Helpers\Supervision\Supervision;
use Helpers\Outil\Date;
use Firebase\JWT\JWT;
use Helpers\Outil\HTTP;
use Helpers\Securite\SecuriteIP;
use Modules\Index\Outil\OutilDoubleAuthentification;
use Entity\Model\Paravrac;
use Entity\Model\Societe;
use Firebase\JWT\Key;
use Modules\GlobalApplication\Repository\Societe as RepositorySociete;
use Modules\Panier\Repository\PanierEntete;
use Modules\RechercheArticles\Repository\Recherche;
use Modules\RechercheArticles\Service\OutilRechercheService;
use Helpers\Session\ParseBase1;

class ConnexionController extends Controller
{
    public $droitAcces = true;
    
    public function init()
    {
    }
    
    public function errorIntegriteAction() : string
    {
        return $this->renderer->render('@index-error/error', [
            'message' => 'OXA.PROC : l’intégrité de l’installation de l’application n’est pas respectée. Veuillez contacter votre administrateur.'
        ]);
    }
    
    public function mdpOublieAction() : string
    {
        $post = $this->request->getParsedBody(true);
        
        $captcha = new Captcha();

        $messageErreur = '';
        $idInput  =  Sql::guidGenerate();
        $mailInput =  Sql::guidGenerate();
        
        $validator = $this->createValidator();
        $connexionSql = new Connexion($this->pdo);
        $connexionWSDL = new Utilisateur($this->pdo);
        $trad = $this->getTranslationService();
        
        if ($post) {
            $idInputSave = 'ID'.$_SESSION['connexion']['idInput'];
            $mailInputSave = 'MAIL'.$_SESSION['connexion']['mailInput'];
            
            if ($post[$idInputSave]=='' && $post[$mailInputSave]=='') {
                $messageErreur .= $trad->t('Veuillez saisir votre identifiant ou votre adresse mail');
            } elseif ($post[$idInputSave]!='') {
                $modeSend='LOGIN';
                
                $value = $post[$idInputSave];
                if (!$connexionSql->userExist($value)) {
                    $message = $trad->t("Vous allez recevoir un email pour changer votre mot de passe si vous êtes referencé dans l'application. Dans le cas contraire, contactez votre administrateur");
                }
            } elseif ($post[$mailInputSave]!='') {
                $modeSend='MAIL';
                $value = $post[$mailInputSave];
                $test = $connexionSql->mailExist($value);

                if ($test) {
                    $value = $test['EMAIL'];
                } else {
                    $message = $trad->t("Vous allez recevoir un email pour changer votre mot de passe si vous êtes referencé dans l'application. Dans le cas contraire, contactez votre administrateur");
                }
            }
            $validator = $this->createValidator();
            $validator->captcha($captcha->getCaptcha('mdpOublie')['code'], $post['mdpOublie']);
            
            if (!$messageErreur && $validator->isValid()) {
                $xmlResult = $connexionWSDL->motdePasseOublier($modeSend, $value);
                $response = new \SimpleXMLElement($xmlResult->responseData);
                
                if ($response->Statut == 'O') {
                    $message = $trad->t("Vous allez recevoir un email pour changer votre mot de passe si vous êtes referencé dans l'application. Dans le cas contraire, contactez votre administrateur");
                } else {
                    $messageErreur = $trad->t('Une erreur est survenue.');
                }
            } else {
                $messageErreur .= $validator->getError();
            }
        }
        
        $_SESSION['connexion']['idInput'] = $idInput;
        $_SESSION['connexion']['mailInput'] = $mailInput;
        
        $captcha->createCaptcha('mdpOublie', 'captchaMdp');
    
        return $this->renderer->render('@index/connexion/mdpOublie', [
            'idInput' => $idInput,
            'mailInput' => $mailInput,
            'messageErreur' => $messageErreur,
            'message' => $message,
        ]);
    }
}
