const express = require('express');
const router = express.Router();

const jwt = require('jsonwebtoken');
const userService = require('../services/userService');
const renderPage = require('../utils/renderHelper');
const logger = require('../utils/logger');
const util = require('util');

// Route pour la page d'authentification
router.get('/', (req, res) => {
  renderPage('auth.ejs', res);
});

// Route pour vérifier la validité du matricule
router.get('/verifyMatricule/:matricule', async (req, res) => {
  const matricule = req.params.matricule.toUpperCase();
  const user = await userService.getUserByMatricule(matricule);
  const admins = await userService.getUsersByAuthGroupe("ADMIN");

  if (user && user.authGroupe != "REVOQUE") {
    // Générer un token si le matricule est valide
    const token = jwt.sign({
      userMatricule: matricule,
      userId: user.id,
      userAuthGroupe: user.authGroupe,
      userFirstName: user.prenom,
      userLastName: user.nom,
      userRegion: user['@expand'].region.nomRegion
    }, 'no-mdp', { expiresIn: '1y' });

    res.json({ valid: true, token });
  } else {
    res.json({ valid: false, admins });
  }
});

// Route pour vérifier la validité du token
router.post('/verifyToken', async (req, res) => {
  // Récupérer le token depuis les en-têtes d'autorisation
  const token = req.headers['authorization'].split(' ')[1];

  // Vérifier le token
  jwt.verify(token, 'no-mdp', (err, decoded) => {
    if (err) {
      return res.json({ valid: false });
    }
    return res.json({ valid: true });
  });
});

module.exports = router;
