import { Router } from 'express';
import { readDB } from '../db.js';
import { getOrRegisterUser } from '../services/users.js';

const router = Router();

const ERRORS = {
  no_cookie: [500, { error: 'no_cookie', message: 'Falta full-cookies.json.' }],
  datadome: [503, { error: 'datadome', message: 'Garena pidió verificación de seguridad. Reintenta en unos segundos.' }],
  invalid_id: [400, { error: 'invalid_id', message: 'ID inválido o no encontrado.' }],
};

// Perfil del usuario. Usa users.json como fuente de verdad para el dashboard.
router.get('/api/users/:id', async (req, res) => {
  const { id } = req.params;
  try {
    // Ruta normal: obtener el usuario local o registrarlo si es nuevo
    const result = await getOrRegisterUser(id);
    if (result.status === 'ok') return res.json(result.user);

    // Fallback defensivo: si Garena falla temporalmente, devolvemos el último estado local.
    const db = readDB();
    const user = db.users[id];
    if (user) {
      if (!Array.isArray(user.discountedPackages)) {
        user.discountedPackages = (user.packages || []).filter(p => p.hasDiscount).map(p => p.id);
      }
      return res.json({ ...user, refreshError: result.status });
    }

    const [code, payload] = ERRORS[result.status] || [500, { error: 'error', message: 'Error de red o DataDome' }];
    return res.status(code).json(payload);
  } catch (err) {
    console.error('Error refrescando usuario desde Garena:', err.message);
    const db = readDB();
    const user = db.users[id];
    if (user) return res.json({ ...user, refreshError: 'error' });
    res.status(500).json({ error: 'error', message: 'Error de red o DataDome' });
  }
});

export default router;
