import { readFile, readdir } from "node:fs/promises";
import { resolve, dirname } from "node:path";
import { fileURLToPath } from "node:url";
// 파일 최상단 상수 — 시간 주기별 법정문서 가이드 entity 로더
// src/ontology/guides/*.json 을 읽어 docId·cycle·메타·작성가이드·검토규칙 제공
// safety-laws-loader 와 동일 패턴
const __dirname = dirname(fileURLToPath(import.meta.url));
const GUIDES_DIR = resolve(__dirname, "..", "ontology", "guides");
// ─── 캐시 ───
let GUIDES_CACHE = null;
// 시간 주기 정렬 순서
const CYCLE_ORDER = {
    daily: 1,
    weekly: 2,
    monthly: 3,
    quarterly: 4,
    semi_annual: 5,
    annual: 6,
    ad_hoc: 7,
    continuous: 8,
};
// 시간 주기 표시명 (UI/응답용)
export const CYCLE_LABELS = {
    daily: "일간",
    weekly: "주간",
    monthly: "월간",
    quarterly: "분기",
    semi_annual: "반기",
    annual: "연간",
    ad_hoc: "수시",
    continuous: "상시",
};
// 모든 가이드 entity 로드
export async function loadAllGuides() {
    if (GUIDES_CACHE)
        return GUIDES_CACHE;
    const files = await readdir(GUIDES_DIR);
    const guides = [];
    for (const f of files) {
        if (!f.endsWith(".json"))
            continue;
        const path = resolve(GUIDES_DIR, f);
        const content = await readFile(path, "utf8");
        try {
            const guide = JSON.parse(content);
            // cycle 정규화: 가이드 JSON 은 `"cyc:daily"` 형태로 저장되어 있으나 도구·CLI 인터페이스는 prefix 없는 enum 을 사용
            guide.cycle = guide.cycle.replace(/^cyc:/, "");
            guides.push(guide);
        }
        catch (err) {
            // eslint-disable-next-line no-console
            console.error(`[guides-loader] ${f} JSON parse error: ${err.message}`);
        }
    }
    // cycle 순 + cycle 내 docId 알파벳 순 정렬
    guides.sort((a, b) => {
        const ca = CYCLE_ORDER[a.cycle] ?? 99;
        const cb = CYCLE_ORDER[b.cycle] ?? 99;
        if (ca !== cb)
            return ca - cb;
        return a.docId.localeCompare(b.docId);
    });
    GUIDES_CACHE = guides;
    return guides;
}
// 특정 docId 가이드 조회
export async function getGuideById(docId) {
    const all = await loadAllGuides();
    return all.find((g) => g.docId === docId);
}
//# sourceMappingURL=safety-document-guides-loader.js.map