import { logger } from '../../utils/logger';
import { AgentSelfAwarenessService, AgentIssueReport } from '../ai/AgentSelfAwarenessService';
import { SemanticLogService } from './SemanticLogService';
import { AIService } from '../../services/AIService';

/**
 * [BIZ_INF_103] 全局 RCA 自动生成器 (RCA Bot)
 * @description 核心逻辑：自动捕获系统级异常，联动 [SemanticLogService] 提取上下文。
 * 利用 AGI 生成结构化的 RCA 报告并对接 [AgentSelfAwarenessService] 进行归档与自省。
 */
export class AutoRCAService {
  /**
   * 触发自动 RCA 分析
   * @param error 异常对象
   * @param context 业务上下文 (tenantId, traceId 等)
   */
  static async analyzeAndReport(error: Error, context: { tenantId: string; traceId?: string; attribution: string }) {
    logger.info(`[AutoRCA] Starting analysis for error in ${context.attribution}: ${error.message}`);

    try {
      // 1. 提取语义上下文 (获取最近 10 条相关日志)
      const relatedLogs = await SemanticLogService.searchLogs(error.message, 10);
      const logContext = relatedLogs.map(l => `[${l.level}] ${l.content}`).join('\n');

      // 2. 调用 AI 进行根因分析 (RCA Generation)
      // 模拟 AI 分析逻辑，实际应调用 AIService.generateRCA
      const analysis = await this.generateAIAnalysis(error, logContext);

      // 3. 构建标准化的 AgentIssueReport (遵循 V30.0 规范)
      const report: AgentIssueReport = {
        agentId: 'RCA_BOT_V30',
        tenantId: context.tenantId,
        level: 'FATAL',
        category: 'Logic Conflict', // 默认分类，可由 AI 动态识别
        attribution: context.attribution,
        rootCause: analysis.rootCause,
        mitigation: analysis.mitigation,
        fallbackPath: analysis.fallbackPath,
        traceId: context.traceId
      };

      // 4. 提交到自省引擎进行归档与二次诊断
      const reportId = await AgentSelfAwarenessService.reportIssue(report);
      
      logger.info(`[AutoRCA] RCA Report #${reportId} generated successfully.`);
      return reportId;
    } catch (err: any) {
      logger.error(`[AutoRCA] Failed to generate RCA: ${err.message}`);
      return null;
    }
  }

  /**
   * 模拟 AI 生成 RCA 逻辑
   */
  private static async generateAIAnalysis(error: Error, logContext: string) {
    // 实际生产环境下，这里会调用 AIService.diagnoseSystemError
    return {
      rootCause: `[AI Analysis] 异常堆栈显示 ${error.name}。结合上下文日志发现，可能是由于高并发下的资源竞争导致。详细堆栈: ${error.stack?.substring(0, 500)}`,
      mitigation: '建议增加分布式幂等锁 (DistributedLockDecorator) 并优化数据库索引。',
      fallbackPath: '自动重试已失效，请人工介入核查数据一致性。'
    };
  }
}
