import fs from 'fs';
import path from 'path';

import { hideBin } from 'yargs/helpers';
import yargs from 'yargs/yargs';

// Get our args
const argv = yargs(hideBin(process.argv)).argv;
const { app, output } = argv;

const folderPath = './locales/' + app;
const namefile = 'translations.json';
const jsonI18n = {};

// Fetch the files in the locales folder
fs.readdirSync(folderPath).map((language) => {
  const languagePath = path.join(folderPath, path.sep, language);
  // Crowdin output file in folder, we want to treat only these ones
  if (!fs.lstatSync(languagePath).isDirectory()) {
    return;
  }

  jsonI18n[language] = {
    translation: {},
  };

  // Get the json file generated by crowdin
  const pathTranslateFile = path.join(languagePath, path.sep, namefile);

  if (!fs.existsSync(pathTranslateFile)) {
    throw new Error(`File ${pathTranslateFile} not found!`);
  }

  const json = JSON.parse(fs.readFileSync(pathTranslateFile, 'utf8'));

  // Transform the json file to the format expected by i18next
  const jsonKeyMessage = {};
  Object.keys(json)
    .sort()
    .forEach((key) => {
      jsonKeyMessage[key] = json[key].message;
    });

  jsonI18n[language] = {
    translation: jsonKeyMessage,
  };
});

if (!Object.keys(jsonI18n).length) {
  throw new Error(`No translation to deploy`);
}

// Write the file to the output
fs.writeFileSync(output, JSON.stringify(jsonI18n), 'utf8');

console.log(`${app} translations deployed!`);
