const fs = require('fs');
const path = require('path');

// 配置
const projectDir = './pages'; // 你的 UniApp 项目路径
const langFilePath = './output3.json'; // 本地语言文件路径
const ignoredFiles = ['node_modules', 'locale']; // 忽略的文件夹或文件

// 加载语言文件
let langData = {};
if (fs.existsSync(langFilePath)) {
    const langFileContent = fs.readFileSync(langFilePath, 'utf-8');
    langData = JSON.parse(langFileContent);
}

// 正则表达式:匹配汉字
const chineseRegex = /[\u4e00-\u9fa5\u3000-\u303f\uff01-\uff5e\u201c-\u201d\u3008-\u3011]+/g;

// 处理单个文件
function processFile(filePath) {
    let content = fs.readFileSync(filePath, 'utf-8');
    const matches = content.match(chineseRegex);

    if (matches) {
        matches.forEach((text) => {
            // 如果语言文件中不存在该汉字,则生成一个唯一的 key
            // if (!langData[text]) {
            //     const key = `text_${Object.keys(langData).length + 1}`;
            //     langData[text] = key;
            // }

            // 替换为 $t('key') 形式
            const key = langData[text];
            const replacement = `$t('${key}')`;
            content = content.replace(new RegExp(text, 'g'), replacement);
        });

        // 写回文件
        fs.writeFileSync(filePath, content, 'utf-8');
    }
}

// 遍历目录
function traverseDirectory(dir) {
    const files = fs.readdirSync(dir);

    files.forEach((file) => {
        const fullPath = path.join(dir, file);
        const stats = fs.statSync(fullPath);

        if (stats.isDirectory()) {
            // 忽略指定的文件夹
            if (!ignoredFiles.includes(file)) {
                traverseDirectory(fullPath);
            }
        } else if (stats.isFile()) {
            // 只处理 .vue 和 .js 文件
            if (/\.(vue|js)$/.test(file)) {
                processFile(fullPath);
            }
        }
    });
}

// 主函数
function main() {
    console.log('开始转换汉字为国际化格式...');

    // 遍历项目目录
    traverseDirectory(projectDir);

    // 更新语言文件
    fs.writeFileSync(langFilePath, JSON.stringify(langData, null, 2), 'utf-8');
    console.log(`语言文件已更新:${langFilePath}`);
    console.log('转换完成!');
}

main();