/**
 * Project-knowledge / local-path 컨텍스트 블록 안에서 *증거 파일* 목록을 뽑아내는
 * pure parser 모음. 두 종류 컨텍스트 포맷이 살짝 달라 함수를 둘로 둠:
 *
 *   - extractEvidenceFilesFromProjectKnowledge: `## Evidence Files` 블록 (project
 *     knowledge overview 문서 포맷). 없으면 `## Confirmed Structure` 블록에서
 *     backtick 경로 fallback.
 *   - extractPriorityPreviewFiles: `File:` 헤더 (local path scan 결과 포맷).
 *     없으면 `Priority file previews:` 섹션의 `### file/path` 헤더 fallback.
 *
 * 둘 다 stateless 정규식 파싱이라 god-file 에 박혀 있을 이유 없음. dedupe 까지
 * 함수 안에서 처리해 호출자는 그냥 list 받아쓰면 된다.
 */

export function extractEvidenceFilesFromProjectKnowledge(recentProjectKnowledgeContext: string): string[] {
    const evidenceBlock = recentProjectKnowledgeContext.match(/## Evidence Files\n([\s\S]*?)(?=\n## |\n# |$)/i)?.[1] || '';
    const evidenceFiles = [...evidenceBlock.matchAll(/-\s+`([^`]+)`/g)].map((match) => match[1].trim());
    if (evidenceFiles.length > 0) {
        return Array.from(new Set(evidenceFiles));
    }

    const structureBlock = recentProjectKnowledgeContext.match(/## Confirmed Structure\n([\s\S]*?)(?=\n## |\n# |$)/i)?.[1] || '';
    return Array.from(new Set([...structureBlock.matchAll(/`([^`]+)`/g)]
        .map((match) => match[1].trim())
        .filter((value) => /[\\/]/.test(value) || /\.[a-z0-9]+$/i.test(value))));
}

export function extractPriorityPreviewFiles(localPathContext: string): string[] {
    const fileMarkerMatches = [...localPathContext.matchAll(/^File:\s*(.+)$/gmi)]
        .map((match) => match[1].trim());
    if (fileMarkerMatches.length > 0) {
        return Array.from(new Set(fileMarkerMatches));
    }

    const previewBlock = localPathContext.match(/Priority file previews:\n([\s\S]*)/)?.[1] || '';
    return Array.from(new Set([...previewBlock.matchAll(/^###\s+(.+)$/gmi)]
        .map((match) => match[1].trim())
        .filter((value) => /[\\/]/.test(value) || /\.[a-z0-9]+$/i.test(value))));
}
