const { log } = require("console");
const fs = require("fs");
const path = require("path");
const folderPath = "./configs";
const scope = [
  "StdItems","Monster"
  //  "ItemMergeConfig", "MergeConfig", "MergeTotal", "RecyclingSettingConfig", "UpstarConfig", "Monster"
];

// 自定义排序函数
function customSort(arr) {
  return arr.sort((a, b) => {
    const isANumeric = !isNaN(a);
    const isBNumeric = !isNaN(b);
    if (isANumeric && isBNumeric) {
      return parseFloat(a) - parseFloat(b);
    } else if (isANumeric) {
      return -1;
    } else if (typeof a == "object") {
      return -1;
    } else if (isBNumeric) {
      return 1;
    } else {
      return a.localeCompare(b);
    }
  });
}

// 递归排序函数
function sortObject(obj) {
  if (Array.isArray(obj)) {
    // 如果是数组，使用自定义排序函数
    return customSort(obj.map((item) => sortObject(item)));
  } else if (typeof obj === "object" && obj !== null) {
    // 如果是对象，递归处理每个属性
    const sortedObj = {};
    Object.keys(obj)
      .sort()
      .forEach((key) => {
        sortedObj[key] = sortObject(obj[key]);
      });
    return sortedObj;
  } else {
    // 如果是基本类型，直接返回
    return obj;
  }
}
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 sortedJson = sortObject(json);
    const jsonstr = JSON.stringify(sortedJson, null, 2);
    fs.writeFileSync(`${folderPath}/${filename}.json`, jsonstr);
  });
};
start();
