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');

    // 匹配 <template> 和 <script> 标签中的内容
    const templateRegex = /<template[^>]*>([\s\S]*?)<\/template>/gi;
    const scriptRegex = /<script[^>]*>([\s\S]*?)<\/script>/gi;

    // 替换 <template> 中的内容
    content = content.replace(templateRegex, (match, templateContent) => {
        return match.replace(chineseRegex, (text) => {
            // 跳过已有的 $t()
            if (templateContent.includes(`$t('${langData[text]}')`) || templateContent.includes(`$t("${langData[text]}")`)) {
                return text; // 不替换
            }
            return replaceText(text, '{{ $t(\'$1\') }}');
        });
    });

    // 替换 <script> 中的内容
    content = content.replace(scriptRegex, (match, scriptContent) => {
        return match.replace(/(['"])([\u4e00-\u9fa5\u3000-\u303f\uff01-\uff5e\u201c-\u201d\u3008-\u3011]+)\1/g, (_, quote, text) => {
            // 跳过已有的 $t()
            if (scriptContent.includes(`this.$t('${langData[text]}')`) || scriptContent.includes(`this.$t("${langData[text]}")`)) {
                return `${quote}${text}${quote}`; // 不替换
            }
            return replaceText(text, 'this.$t(\'$1\')');
        });
    });

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

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

    // 替换为指定的模式
    const key = langData[text];
    return replacementPattern.replace('$1', text);
}

// 遍历目录
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();