import * as fs from "fs";
import { langs } from "../types/langs";
import { TypeSimpleJson } from "../types/types";
import { addKeyValueToObject } from "./add-key-value-to-object";
import { sortByLanguage } from "./sort-by-language";
import { ConfigOptions } from "./translate-file-csv";

export const saveWithLevels = (jsonObj: TypeSimpleJson[], folderSave: string, config?: ConfigOptions) => {
  return new Promise((resolve, reject) => {
    try {
      const translationsOrders = sortByLanguage(jsonObj);
      const notCreate = ["base", "key"];
      const langsKeys = langs.map((lang) => lang.code);

      translationsOrders.map((translation) => {
        const language = Object.keys(translation)[0];

        if (!notCreate.includes(language) && langsKeys.includes(language)) {
          let result = {};

          Object.entries(translation[language]).forEach(([key, value]) => {
            const keys = key.split(config?.separator ?? ".");
            addKeyValueToObject(result, keys, value);
          });

          fs.writeFileSync(
            `${folderSave}/${language}.json`,
            JSON.stringify(result, null, 4)
          );

          console.log(`🟢  Finish success ${language.toUpperCase()}  ${folderSave}/${language}.json \n`);
        }
      });

      resolve("Operation completed successfully");
    } catch (error) {
      reject(`Error occurred: ${error}`);
    }
  });
};
