/**
 * 활동 로깅 미들웨어
 *
 * HTTP 요청/응답 활동을 기록하는 미들웨어
 *
 * @author TK-FB-Project
 * @since 2025-12-11
 */

const logger = require('../utils/logger');

/**
 * 활동 로거 미들웨어
 * 모든 HTTP 요청의 시작과 완료를 기록
 */
const activityLogger = (req, res, next) => {
  const start = Date.now();

  // 응답 완료 시 로깅
  res.on('finish', () => {
    const duration = Date.now() - start;
    const username = req.user?.username || 'anonymous';

    const logData = {
      method: req.method,
      url: req.originalUrl,
      statusCode: res.statusCode,
      duration: `${duration}ms`,
      ip: req.ip,
      user: username,
      userAgent: req.get('User-Agent')
    };

    // 상태 코드에 따른 로그 레벨 분기
    if (res.statusCode >= 500) {
      logger.error('HTTP Request - Server Error', logData);
    } else if (res.statusCode >= 400) {
      logger.warn('HTTP Request - Client Error', logData);
    } else if (res.statusCode >= 300) {
      logger.info('HTTP Request - Redirect', logData);
    } else {
      logger.info('HTTP Request - Success', logData);
    }
  });

  next();
};

/**
 * 민감한 경로 필터 미들웨어
 * 로그에서 민감한 정보를 제외
 */
const sensitivePathFilter = (req, res, next) => {
  const sensitivePaths = [
    '/api/auth/login',
    '/api/auth/refresh-token',
    '/api/users/password'
  ];

  // 민감한 경로의 경우 바디 로깅 스킵
  if (sensitivePaths.some(path => req.originalUrl.includes(path))) {
    req.skipBodyLog = true;
  }

  next();
};

module.exports = {
  activityLogger,
  sensitivePathFilter
};
