<?php

namespace App\Controllers;

use App\Models\GsbModel;

/**
 * Contrôleur de connexion et déconnexion des utilisateurs.
 */
class Connexion extends BaseController
{
    protected $gsb_model;

    public function __construct()
    {
        helper(['url', 'form']);
        $this->gsb_model = new GsbModel();
    }

    /** Affiche l'écran de connexion */
    public function login()
    {
        return view('structures/page_entete')
            . view('structures/messages')
            . view('connexion')
            . view('structures/page_pied');
    }

    /** Valide la saisie du formulaire de connexion et ouvre la session */
    public function valider()
    {
        $reglesSaisie = [
            'txtLogin' => [
                'rules' => 'required|min_length[3]',
                'label' => 'Login'
            ],
            'pwdMdp' => [
                'rules' => 'required|min_length[3]',
                'label' => 'Mot de passe'
            ]
        ];

        if (!$this->validate($reglesSaisie)) {
            return redirect()->back()->withInput()->with('validation', $this->validator);
        }

        $login = $this->request->getPost('txtLogin');
        $mdp = $this->request->getPost('pwdMdp');

        $utilisateur = $this->gsb_model->get_infos_utilisateur($login, $mdp);

        if ($utilisateur) {

            $infosMdp = $this->gsb_model->get_infos_mdp($utilisateur['idutilisateur']);

            $dateCreationMdp = date_create($infosMdp['dateCreationMdp']);
            $dateAujourdhui = date_create('now');

            $difference = $dateAujourdhui->diff($dateCreationMdp);
            $differenceJours = $difference->days;

            session()->set([
                'idutilisateur' => $utilisateur['idutilisateur'],
                'nom' => $utilisateur['nom'],
                'prenom' => $utilisateur['prenom'],
                'libelleRole' => $utilisateur['libelle'],
                'idRole' => $utilisateur['idRole'],
                'isLoggedIn' => true
            ]);

            // Force le changement de mot de passe si > 90 jours
            if ($differenceJours > 90) {
                session()->set('force_changement_mdp', true);
                return redirect()->to('/motdepasse')->with('erreurs', 'Votre mot de passe a expiré, vous devez le changer.');
            }

            return redirect()->to('/accueil');
        }

        return redirect()->back()->withInput()->with('erreurs', 'Login ou mot de passe incorrect.');
    }

    /** Déconnecte l'utilisateur et détruit sa session */
    public function deconnexion()
    {
        session()->remove(['idutilisateur', 'nom', 'prenom', 'libelleRole', 'idRole', 'isLoggedIn']);
        return redirect()->to('/')->with('infos', 'Vous avez bien été déconnecté.');
    }
}
