// api.mebboat.it/api/sessions

const router = require('express').Router();
const { query } = require('../storage/database');
const userAuth = require('../middlewares/user.security');

router.use(userAuth);

// Mostra SOLO le sessioni dell'utente autenticato (non di tutti!)
router.get('/', async (req, res) => {
    try {
        const result = await query(
            `SELECT id, ip_address, browser, os, device_type, 
                    location_country, location_city, created_at, last_active, is_revoked 
             FROM sessions 
             WHERE user_id = $1 
             ORDER BY last_active DESC`,
            [req.user.user_id]
        );
        res.json(result.rows);
    } catch (err) {
        console.error('[SESSIONS] Errore recupero sessioni:', err);
        res.status(500).json({ error: 'Errore interno del server' });
    }
});

// Revoca una sessione specifica dell'utente
router.delete('/:sessionId', async (req, res) => {
    const { sessionId } = req.params;

    // Validazione UUID
    const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
    if (!UUID_REGEX.test(sessionId)) {
        return res.status(400).json({ error: 'ID sessione non valido' });
    }

    try {
        // Verifica che la sessione appartenga all'utente autenticato
        const result = await query(
            'UPDATE sessions SET is_revoked = TRUE WHERE id = $1 AND user_id = $2 AND is_revoked = FALSE',
            [sessionId, req.user.user_id]
        );

        if (result.rowCount === 0) {
            return res.status(404).json({ error: 'Sessione non trovata o già revocata' });
        }

        res.json({ success: true, message: 'Sessione revocata' });
    } catch (err) {
        console.error('[SESSIONS] Errore revoca sessione:', err);
        res.status(500).json({ error: 'Errore interno del server' });
    }
});

module.exports = router;