// utils/jwt.js
const jwt = require('jsonwebtoken');
require('dotenv').config(); // carrega variáveis do arquivo .env na raiz do projeto

// Caso a variável não esteja definida, avisamos logo de cara:
if (!process.env.SECRET_JWT) {
  throw new Error('A variável JWT_SECRET não foi definida no .env');
}

const SECRET = process.env.SECRET_JWT;
console.log('🔐 Usando JWT_SECRET:', SECRET); // Apenas para debug, remova em produção

/**
 * Gera um JWT com um payload qualquer.
 * @param {Object} payload  — objeto de claims (por ex: { id: user.id, role: user.role })
 * @param {string} [expiresIn='30m'] — tempo de expiração (ex: '30m', '1h', '7d')
 * @returns {string} — token JWT assinado
 */
function generateToken(payload, expiresIn = '30m') {
  return jwt.sign(payload, SECRET, { expiresIn });
}

/**
 * Valida um token JWT. Retorna o payload decodificado ou lança um erro caso seja inválido/expirado.
 * @param {string} token
 * @returns {Object} — payload decodificado
 */
function verifyToken(token) {
  return jwt.verify(token, SECRET);
}

module.exports = { generateToken, verifyToken };
