import fs from 'node:fs';

// Dependency from Lingui, not listed in package.json
import PO from 'pofile';

const DEFAULT_LANG = 'en';
const IGNORE_LANGS = [DEFAULT_LANG, 'pseudo-LOCALE'];

const files = fs.readdirSync('src/locales');
const catalogs = {};

const enCatalog = files.find((file) => file.endsWith('en.po'));
const enContent = fs.readFileSync(`src/locales/${enCatalog}`, 'utf8');
const enPo = PO.parse(enContent);
const total = enPo.items.length;
console.log('Total strings:', total);

files.forEach((file) => {
  if (file.endsWith('.po')) {
    const code = file.replace(/\.po$/, '');
    if (IGNORE_LANGS.includes(code)) return;
    const content = fs.readFileSync(`src/locales/${file}`, 'utf8');
    const po = PO.parse(content);
    const { items } = po;
    // Percentage of translated strings
    const translated = items.filter(
      (item) => item.msgstr !== '' && item.msgstr[0] !== '',
    ).length;
    const percentage = Math.round((translated / total) * 100);
    po.percentage = percentage;
    if (percentage > 0) {
      // Ignore empty catalogs
      catalogs[code] = percentage;
    }
  }
});

// Sort by percentage
const sortedCatalogs = Object.entries(catalogs)
  .sort((a, b) => b[1] - a[1])
  .map(([code, percentage]) => {
    const name = new Intl.DisplayNames(['en'], { type: 'language' }).of(code);
    return { code, name, percentage };
  });

console.table(sortedCatalogs);

const path = 'src/data/catalogs.json';
fs.writeFileSync(
  path,
  JSON.stringify(
    Object.entries(catalogs).map(([code, percentage]) => ({
      code,
      completion: percentage,
    })),
    null,
    2,
  ),
);
console.log('File written:', path);