// src/i18n/translate.ts
// CLI 消息翻译 — 根据 locale 从 JSON 资源文件查找翻译
import { createRequire } from 'node:module';
import { readFileSync } from 'node:fs';
import { detectCliLocale } from './locale.js';
const require = createRequire(import.meta.url);
const en = require('./resources/cli/en.json');
// 运行时已加载的资源缓存（en 总是预加载）
const loaded = new Map([['en', en]]);
/** 同步加载指定语言的资源文件（失败时 fallback 到 en） */
function loadSync(locale) {
    if (loaded.has(locale))
        return loaded.get(locale);
    if (locale === 'en')
        return en;
    try {
        const raw = readFileSync(new URL(`./resources/cli/${locale}.json`, import.meta.url), 'utf8');
        const tree = JSON.parse(raw);
        loaded.set(locale, tree);
        return tree;
    }
    catch {
        // 找不到翻译文件，fallback 到英文
        loaded.set(locale, en);
        return en;
    }
}
/**
 * 获取翻译文本
 * @param key 点分隔的 key，如 'plan.validate_passed'
 * @param params 插值参数，如 { count: 5 }
 * @param locale 可选，默认自动检测 CLI locale
 */
export function t(key, params, locale) {
    const loc = locale ?? detectCliLocale();
    const tree = loadSync(loc);
    // 按 . 分割 key 遍历树
    const parts = key.split('.');
    let node = tree;
    for (const part of parts) {
        if (typeof node !== 'object' || node === null)
            return key; // 查不到，返回 key 本身
        node = node[part];
    }
    if (typeof node !== 'string')
        return key;
    // 插值替换 {param}
    if (params) {
        return node.replace(/\{(\w+)\}/g, (_, name) => String(params[name] ?? `{${name}}`));
    }
    return node;
}
