const jwt = require('../tools/jwt');

/**
 * Middleware di autenticazione per utenti finali.
 * Verifica il JWT dal cookie 'auth_token' o dall'header 'Authorization: Bearer <token>'.
 * 
 * Se valido, inietta req.user con { user_id, username, session_id }.
 */
const userAuth = (req, res, next) => {
    const token = (req.cookies && req.cookies.auth_token) || jwt.getToken(req.headers['authorization']);

    if (!token || typeof token !== 'string') {
        return res.status(401).json({ error: 'Accesso negato: token mancante' });
    }

    // Limite ragionevole sulla lunghezza del token per evitare abusi
    if (token.length > 2048) {
        return res.status(400).json({ error: 'Token non valido' });
    }

    const verified = jwt.verifyToken(token);
    if (!verified.valid) {
        return res.status(401).json({ 
            error: 'Sessione non valida o scaduta', 
            reason: verified.reason 
        });
    }

    req.user = verified.payload;
    next();
};

module.exports = userAuth;
