const { log } = require("console");
const fs = require("fs");
const path = require("path");
const folderPath = "./configs";
const scope = [
  "StdItems",
  "Monster",
  "ItemMergeConfig",
  "MergeConfig",
  "SpecialRingConfig",
  "RecyclingSettingConfig",
  "ActivitiesConf",
  "UpstarPriceConfig",
  "UpstarConfig",
  "GuildDonateConfig",
  // "NpcTransConf"
  //  "MergeTotal", "RecyclingSettingConfig", "UpstarConfig",
].filter(Boolean);
const strKey = (key) => (isNaN(key) ? `${key}` : `[${key}]`);
function jsonToLua(jsonObj, indent = "", linefeed = "\n") {
  let luaStr = "";
  for (key in jsonObj) {
    let value = jsonObj[key];
    key = strKey(key);
    if (typeof value === "object" && value !== null && !Array.isArray(value)) {
      // 对象
      luaStr += `${indent}${key} = {`;
      luaStr += jsonToLua(value, indent + "  ");
      luaStr += `${indent}},\n`;
    } else if (Array.isArray(value)) {
      // 数组
      luaStr += `${indent}${key} = {`;
      value.forEach((item) => {
        if (typeof item === "string") {
          luaStr += `${indent}  '${item}',`;
        } else if (typeof item == "object") {
          luaStr += `{${jsonToLua(item, "", "")}},`;
        } else {
          luaStr += `${indent}  ${item},`;
        }
      });
      luaStr += `${indent}},\n`;
    } else {
      // 基础类型
      if (typeof value === "string") {
        luaStr += `${indent}${key}="${value}",${linefeed}`;
      } else {
        luaStr += `${indent}${key}=${value},${linefeed}`;
      }
    }
  }
  return luaStr;
}
const start = () => {
  const files = fs.readdirSync(folderPath);

  // 过滤出所有的 JSON 文件
  const jsonFiles = files.filter((file) => path.extname(file) === ".json").filter((file) => scope.map((e) => `${e}.json`).includes(file));
  jsonFiles.forEach((file) => {
    const json = JSON.parse(fs.readFileSync(path.join(folderPath, file), "utf8"));
    const filename = path.basename(file, path.extname(file));
    const luaConfig = `${filename}={\n${jsonToLua(json)}\n}`;

    fs.writeFileSync(`./luaConfigs/${filename}.config`, luaConfig);
  });
};
start();
