// src/middleware/auth.js
const { verifyJWT } = require('../utils/jwt');

// auth(required = true)
// - required = true  -> la ruta exige token (401 si no viene o es inválido)
// - required = false -> la ruta es pública pero, si viene token válido, adjunta req.user
module.exports = function auth(required = true) {
  return (req, res, next) => {
    const hdr = req.headers.authorization || '';
    const token = hdr.startsWith('Bearer ') ? hdr.slice(7) : null;

    if (!token) {
      if (!required) return next();        // rutas públicas opcionales
      return res.status(401).json({ error: 'Token requerido' });
    }

    try {
      const payload = verifyJWT(token);     // lanza si es inválido o expiró
      req.user = payload;                   // { id, email, role, ... }
      next();
    } catch (e) {
      return res.status(401).json({ error: 'Token inválido o expirado' });
    }
  };
};
