// ============================================================
// 🐾 asyncRoute — 异步路由错误捕获装饰器
// 包一层自动捕获 async 路由里的异常，防止进程崩溃
// ============================================================

/**
 * 用法: 在路由文件中
 *   const { asyncRoute } = require('../middleware/error-catcher');
 *   router.get('/xxx', asyncRoute(async (req, res) => { ... }));
 * 或者全局:
 *   app.use(asyncRoute(yourHandler));
 */
function asyncRoute(fn) {
  return (req, res, next) => {
    Promise.resolve(fn(req, res, next)).catch(next);
  };
}

/**
 * 安全 JSON 响应包装 — 所有 API 响应都走这里
 * 确保即使出错也返回标准格式而非进程崩溃
 */
function safeResponse(res, statusCode = 500, data = null) {
  try {
    return res.status(statusCode).json({
      code: statusCode,
      message: statusCode === 200 ? 'ok' : '服务器繁忙，请稍后重试',
      data
    });
  } catch(e) {
    // 连JSON响应都挂了，最后的保底
    try {
      res.status(500).send('Server Error');
    } catch(_) {}
  }
}

module.exports = { asyncRoute, safeResponse };
