import { logger } from '../../utils/logger';
import { SemanticLogService } from '../telemetry/SemanticLogService';
import os from 'os';

/**
 * [BIZ_KER_131] 容器运行时资源限制动态调整 (Container Quota)
 * @description 核心逻辑：监控当前 Node.js 进程的资源占用（CPU/Mem）。
 * 当检测到接近 Docker/K8s 限制时，动态调整内部线程池或并发数。
 * 输出资源限制风险报告，建议扩容或水平伸缩。
 * 遵循 Autocomplete-First (V31.5) 规范。
 */
export class ContainerQuotaService {
  private static readonly CPU_THRESHOLD = 0.8; // 80% CPU 预警
  private static readonly MEM_THRESHOLD = 0.85; // 85% 内存预警

  /**
   * 初始化资源监控
   */
  static async init() {
    logger.info(`[ContainerQuota] Initializing runtime resource monitoring...`);
    this.startMonitoring();
  }

  /**
   * 启动定时监控
   * @private
   */
  private static startMonitoring() {
    setInterval(async () => {
      try {
        const cpuUsage = os.loadavg()[0] / os.cpus().length;
        const memUsage = 1 - (os.freemem() / os.totalmem());

        if (cpuUsage > this.CPU_THRESHOLD || memUsage > this.MEM_THRESHOLD) {
          await this.reportResourcePressure(cpuUsage, memUsage);
        }
      } catch (err: any) {
        logger.error(`[ContainerQuota] Monitor error: ${err.message}`);
      }
    }, 60000); // 每分钟检查一次
  }

  /**
   * 上报资源压力报告
   * @private
   */
  private static async reportResourcePressure(cpu: number, mem: number) {
    const report = `### 📉 Container Runtime Resource Pressure\n\n` +
                   `**CPU Usage:** ${(cpu * 100).toFixed(2)}% | **Memory Usage:** ${(mem * 100).toFixed(2)}%\n\n` +
                   `**Risk:** 进程接近容器限制，可能触发 OOM Kill 或响应延迟剧增。\n\n` +
                   `**Recommendation:** 建议立即触发 K8s 水平自动扩容 (HPA)，或调低 ` +
                   `\`InfinityComputeService\` 的并发限制。`;

    await SemanticLogService.logSemantic(report, 'WARN', 'SYSTEM_HEALTH');
    logger.warn(`[ContainerQuota] Resource pressure detected: CPU=${(cpu * 100).toFixed(2)}%, MEM=${(mem * 100).toFixed(2)}%`);
  }
}
