/**
 * URL 컨텍스트 + wikify 정본 포맷 — 순수 로직 테스트.
 */
import { extractUrlFromPrompt } from '../src/lib/contextBuilders/urlContext';
import { buildWikifyPrompt, type CanonicalWikiFormat } from '../src/features/datacollect/prompts/wikifyPrompt';

describe('extractUrlFromPrompt', () => {
    test('URL 추출 + 끝 구두점 제거', () => {
        expect(extractUrlFromPrompt('이 글 요약해줘 https://example.com/post.')).toBe('https://example.com/post');
        expect(extractUrlFromPrompt('https://a.io/x?q=1 내용 확인')).toBe('https://a.io/x?q=1');
    });
    test('슬래시 명령은 제외 (/wikify 가 자체 처리)', () => {
        expect(extractUrlFromPrompt('/wikify https://example.com')).toBeNull();
    });
    test('URL 없으면 null', () => {
        expect(extractUrlFromPrompt('오늘 일정 알려줘')).toBeNull();
        expect(extractUrlFromPrompt('')).toBeNull();
    });
});

describe('buildWikifyPrompt — 정본/fallback 포맷', () => {
    const extracted = { url: 'https://ex.com/doc', title: '문서', text: '본문 내용입니다. '.repeat(10), headings: ['h1'] };

    test('정본 주입 시 placeholder 가 채워진다', () => {
        const canonical: CanonicalWikiFormat = {
            version: '9.9',
            commonRules: '\n7. 규칙 루트={{ROOT}}',
            frontmatter: '---\nid: {{ID}}\ntitle: "{{TITLE}}"\ntags: [{{TAGS}}]\nraw_sources: {{SOURCES}}\n---',
            sections: '# [[{{TOPIC}}]]\n- {{TODAY}}: {{ORIGIN}}',
        };
        const p = buildWikifyPrompt(extracted, '테스트 주제', canonical);
        expect(p).toContain('P-Reinforce v9.9');
        expect(p).toContain('규칙 루트=테스트 주제');
        expect(p).toContain('title: "테스트 주제"');
        expect(p).toContain('raw_sources: ["https://ex.com/doc"]');
        expect(p).not.toContain('{{'); // placeholder 잔존 금지
    });

    test('정본 없으면 내장 사본 — 현대화 항목 포함', () => {
        const p = buildWikifyPrompt(extracted, '주제', null);
        expect(p).toContain('category는 폴더경로 말고 논리 도메인');     // 물리 경로 버그 수정
        expect(p).toContain("aliases'에 동의어");                        // 별칭 강제
        expect(p).toContain('지식 충돌 시 우선순위 판단');               // 동적 신뢰도 — 충돌 권고 입력
        expect(p).toContain('## 🔗 지식 그래프');                        // 섹션명 통일 (구 "관련 문서 링크" 대체)
        expect(p).not.toContain('category: "10_Wiki/Topics"');
        expect(p).not.toContain('{{');
    });
});
