const l  = require("lodash");
const fs = require("fs");
const gt = require("gettext-parser");

function generateLang(data, lang) {
  let output = {};

  for (let key of Object.keys(data)) {
    const trObj = data[key];
    const trRef = trObj["used-in"];

    let content = trObj.translations[lang];
    let comments = {};

    if (l.isNil(content)) {
      continue;
    } else {
      let result = {
        msgid: key,
        comments: {}
      }

      if (l.isArray(trRef)) {
        result.comments.reference = trRef.join(", ");
      }

      if (trObj.permanent) {
        result.comments.flag = "permanent";
      }

      if (l.isArray(content)) {
        result.msgid_plural = key;
        result.msgstr = content;
      } else if (l.isString(content)) {
        result.msgstr = [content];
      } else {
        throw new Error("unexpected");
      }

      output[key] = result;
    }
  }

  if (lang.includes("_")) {
    const [a, b] = lang.split("_");
    lang = `${a}_${b.toUpperCase()}`;
  }

  const poData = {
    charset: "utf-8",
    headers: {
      "Language": lang,
      "MIME-Version": "1.0",
      "Content-Type": "text/plain; charset=UTF-8",
      "Content-Transfer-Encoding": "8bit",
      "Plural-Forms": "nplurals=2; plural=(n != 1);"
    },
    "translations": {
      "": output
    }
  }
  const buff = gt.po.compile(poData, {sort: true});
  fs.writeFileSync(`./translations/${lang}.po`, buff);
}

const content = fs.readFileSync("./resources/locales.json");
const data = JSON.parse(content);
const langs = ["de"];

for (let lang of langs) {
  generateLang(data, lang);
}