import type { ProjectProfile, ChronicleRecordEntry } from '../../features/projectChronicle';

/**
 * Chronicle (Designer) 모드 webview status payload 빌더. webview send 호출은
 * sidebarProvider 가 담당 — 이 모듈은 stateless 데이터 변환만.
 *
 *   - buildChronicleProjectsPayload(projects, activeProjectId)
 *   - buildChronicleRecordsPayload(records)
 *
 * `_chronicle.listRecords()` 자체는 ProjectChronicleManager 의 stateful 호출이라
 * provider 가 수행 후 결과만 builder 에게 넘긴다.
 */

/**
 * Project 목록 + 활성 project id. 빈 active id 는 빈 문자열로 정규화 (webview 가
 * undefined 처리 분기 추가 필요 없게).
 */
export function buildChronicleProjectsPayload(projects: ProjectProfile[], activeProjectId: string) {
    return {
        type: 'chronicleProjects' as const,
        value: {
            activeProjectId: activeProjectId || '',
            projects: projects.map((project) => ({
                id: project.projectId,
                name: project.projectName,
                root: project.projectRoot || '',
                recordRoot: project.recordRoot,
                description: project.description || '',
            })),
        },
    };
}

/**
 * Record list — 활성 project 없으면 호출자가 빈 배열을 넘긴다.
 * webview 는 항상 array 를 받으므로 분기 단순화.
 */
export function buildChronicleRecordsPayload(records: ChronicleRecordEntry[]) {
    return {
        type: 'chronicleRecords' as const,
        value: records.map((record) => ({
            section: record.section,
            fileName: record.fileName,
            path: record.filePath,
            relativePath: record.relativePath,
            updatedAt: record.updatedAt,
        })),
    };
}
