/**
 * v2.2.273 — 지식 문서 로컬 저장 (순수 로직: 파일명 안전화 + 저장 폴더 우선순위).
 */
import * as path from 'path';
import { sanitizeWikiFileName, pickWikiDir } from '../src/features/datacollect/wikiSave';

describe('sanitizeWikiFileName', () => {
    test('금지 문자 치환 + .md 보장', () => {
        const f = sanitizeWikiFileName('회의록 a/b:c*d?e<f>g|h 2026-07-03');
        expect(f).not.toMatch(/[\\/:*?"<>|]/);
        expect(f.endsWith('.md')).toBe(true);
        expect(f).toContain('회의록');
    });

    test('빈 제목 → untitled, 120자 캡', () => {
        expect(sanitizeWikiFileName('')).toMatch(/^untitled_\d+\.md$/);
        expect(sanitizeWikiFileName('가'.repeat(300)).length).toBeLessThanOrEqual(124);
    });

    test('.md 중복 방지', () => {
        expect(sanitizeWikiFileName('문서.md')).toBe('문서.md');
    });
});

describe('pickWikiDir — 저장 폴더 우선순위', () => {
    const abs = path.resolve('E:/커스텀/위키');

    test('① 설정 절대경로 최우선', () => {
        const r = pickWikiDir(abs, 'E:/brain', 'E:/ws');
        expect(r).toEqual({ dir: abs, label: '설정 폴더' });
    });

    test('② 설정 없으면 두뇌/Datacollect_Wiki', () => {
        const r = pickWikiDir('', 'E:/brain', 'E:/ws');
        expect(r!.label).toBe('두뇌');
        expect(r!.dir).toBe(path.join('E:/brain', 'Datacollect_Wiki'));
    });

    test('③ 두뇌 없으면 워크스페이스/.astra/wiki', () => {
        const r = pickWikiDir('', '', 'E:/ws');
        expect(r!.label).toBe('워크스페이스');
        expect(r!.dir).toBe(path.join('E:/ws', '.astra', 'wiki'));
    });

    test('상대경로 설정은 무시하고 다음 후보로 (경로 오염 방지)', () => {
        const r = pickWikiDir('상대/경로', 'E:/brain', null);
        expect(r!.label).toBe('두뇌');
    });

    test('④ 전부 없으면 null', () => {
        expect(pickWikiDir('', '', null)).toBeNull();
    });
});

describe('pickWikiDir — 이메일 지식 문서 별도 관리 (kind=email)', () => {
    test('기본 폴더가 Email_Wiki 로 분리 — 일반(Datacollect_Wiki)과 다름', () => {
        const email = pickWikiDir('', 'E:/brain', 'E:/ws', 'email');
        const general = pickWikiDir('', 'E:/brain', 'E:/ws', 'general');
        expect(email!.dir).toBe(path.join('E:/brain', 'Email_Wiki'));
        expect(general!.dir).toBe(path.join('E:/brain', 'Datacollect_Wiki'));
        expect(email!.dir).not.toBe(general!.dir);
    });

    test('이메일 전용 설정 경로가 최우선', () => {
        const abs = path.resolve('E:/이메일위키');
        const r = pickWikiDir(abs, 'E:/brain', 'E:/ws', 'email');
        expect(r).toEqual({ dir: abs, label: '설정 폴더' });
    });

    test('두뇌 없으면 워크스페이스 .astra/wiki/email', () => {
        const r = pickWikiDir('', '', 'E:/ws', 'email');
        expect(r!.dir).toBe(path.join('E:/ws', '.astra', 'wiki', 'email'));
    });
});
