import * as vscode from 'vscode';
import { MissionState } from './engine';

/**
 * @deprecated v2.2.76+ 부터 *기본 OFF*. 현재 시스템에서 거의 unreachable.
 *
 * 옛 5-stage 파이프라인의 최종 답변을 P-Reinforce v3.0 frontmatter + Reliability
 * Audit 표 형태로 wrap 하던 클래스. 사용자 피드백 ("일반 채팅에 wiki 메타데이터가
 * 끼어 보임") 으로 `AgentEngine.runMission` 에서 *명시적 opt-in* (options.config.
 * formatAsKnowledgeArtifact === true) 일 때만 호출되도록 게이팅됨.
 *
 * 사용 후보 (활성화하려면):
 *   - 향후 명시적 "wiki 보관용 답변 모드" 기능 도입 시
 *   - Datacollect 의 P-Reinforce v3.0 위키 합성 경로에서 격리된 호출
 *
 * 활성화 호출처가 늘어나지 않는다면 다음 라운드에 *완전 제거* 후보.
 */
export class WikiFormatter {
    /**
     * 최종 에이전트 출력물을 P-Reinforce v3.0 표준 포맷으로 변환합니다.
     * @deprecated 위 클래스 docstring 참고.
     */
    public static format(content: string, state: MissionState): string {
        const now = new Date().toISOString();
        const missionId = state.missionId;
        
        // 1. Frontmatter 주입 (항상 갱신)
        const frontmatter = [
            '---',
            `id: ${missionId}`,
            `date: ${now}`,
            'type: knowledge_artifact',
            'standard: P-Reinforce v3.0',
            'tags: [automated, connect_ai, brain_sync]',
            '---',
            '',
            ''
        ].join('\n');

        // 기존 frontmatter 제거 (있는 경우)
        let cleanContent = content.replace(/^---[\s\S]*?---\n*/, '');
        let formatted = frontmatter + cleanContent;

        // 2. 지능형 요약 추출 및 보정
        if (!formatted.includes('## 📌 Brief Summary')) {
            const lines = cleanContent.split('\n');
            // '📌', '요약', 'Summary'가 포함된 줄을 먼저 찾거나, 20자 이상의 첫 단락을 찾음
            let summary = lines.find(l => l.includes('📌') || l.includes('Summary') || l.includes('요약'))?.replace(/^[#\s📌]*/, '');
            
            if (!summary) {
                summary = lines.find(l => l.trim().length > 30 && !l.startsWith('#')) || '요약 내용을 추출할 수 없습니다.';
            }

            const summarySection = `## 📌 Brief Summary\n${summary.substring(0, 300)}${summary.length > 300 ? '...' : ''}\n\n`;
            formatted = formatted.replace(/---\n\n/, `---\n\n${summarySection}`);
        }

        // 3. 코드 스니펫 섹션 보정
        if (!formatted.includes('## 💻 Practical Implementation') && !formatted.includes('## 💻 실전 구현 코드')) {
            if (formatted.includes('```')) {
                formatted = formatted.replace(/```/, '\n## 💻 실전 구현 코드\n\n```');
            }
        }

        // 4. [Astra v4.0] 신뢰성 보고서 (Reliability & Audit Summary)
        const metrics = state.resilienceMetrics;
        const totalDuration = Date.now() - state.startTime;
        const reliabilitySection = [
            '',
            '---',
            '## 🛡️ Reliability & Audit Summary',
            `> [!NOTE]`,
            `> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.`,
            '',
            '| Metric | Value | Status |',
            '| :--- | :--- | :--- |',
            `| **Conflict Risk** | \`${metrics.maxConflictScore}/100\` | ${metrics.maxConflictScore < 30 ? '✅ Low' : metrics.maxConflictScore < 70 ? '⚠️ Medium' : '🚨 High'} |`,
            `| **Fallbacks Used** | \`${metrics.fallbacks}\` | ${metrics.fallbacks === 0 ? '✅ None' : '💡 Recovered'} |`,
            `| **Auto Retries** | \`${metrics.retries}\` | ${metrics.retries < 3 ? '✅ Stable' : '⚠️ Unstable'} |`,
            `| **Deduplication** | \`${metrics.deduplications}\` | ${metrics.deduplications > 0 ? '🚀 Optimized' : 'Standard'} |`,
            `| **Processing Time** | \`${(totalDuration / 1000).toFixed(1)}s\` | ✅ Fast |`,
            '',
            '### 🔍 Decision Audit Trail',
            // 재시도(retry) 등 반복적인 로그는 제외하고 핵심 단계 전환만 필터링하여 출력
            state.auditTrail
                .filter(a => !a.message.includes('재시도') && a.from !== a.to)
                .map(a => `- **[${a.to.toUpperCase()}]** ${a.message} (${a.durationFromPrev}ms)`)
                .join('\n'),
            ''
        ].join('\n');

        formatted += reliabilitySection;

        return formatted;
    }
}
