import transformer from '@umijs/preset-dumi/lib/transformer';
import { defineConfig } from 'dumi';
import fs from 'fs';
import path from 'path';
import menus from './docs/menus';

const lang = process.env.DOC_LANG || 'en-US';

console.log('process.env.DOC_LANG', process.env.DOC_LANG);

const findFilePath = (filename, lang) => {
  const filePath = path.resolve(__dirname, `docs/${lang}/${filename}`);
  if (fs.existsSync(`${filePath}.md`)) {
    return `${filePath}.md`;
  }
  return;
};

const markdown = (filename, lang) => {
  const filePath = findFilePath(filename, lang);
  if (!filePath) {
    return;
  }
  return transformer.markdown(fs.readFileSync(filePath, 'utf8').toString(), filePath);
};

const getPath = (value: string) => {
  if (!value) {
    return '';
  }
  const keys = value.split('/');
  if (keys.pop() === 'index') {
    return keys.join('/') || '/';
  }
  return value;
};

const getTitle = (item, lang) => {
  if (lang) {
    return item[`title.${lang}`] || item.title;
  }
  return item.title;
};

const parseMenuItems = (items, lang = null) => {
  const menuItems = [];
  for (const item of items) {
    if (typeof item === 'string') {
      const result = markdown(item, lang);
      if (result) {
        menuItems.push({
          title: result.meta.title,
          disabled: result.meta.disabled,
          path: getPath(item),
        });
      }
    } else if (item.children) {
      menuItems.push({
        ...item,
        title: getTitle(item, lang),
        children: parseMenuItems(item.children, lang),
      });
    } else if (item.path) {
      menuItems.push({
        ...item,
        title: getTitle(item, lang),
        path: getPath(item.path),
      });
    } else {
      menuItems.push({
        title: getTitle(item, lang),
        ...item,
      });
    }
  }
  return menuItems;
};

export default defineConfig({
  title: 'NocoBase',
  outputPath: `./docs/dist/${lang}`,
  mode: 'site',
  resolve: {
    includes: [`./docs/${lang}`],
  },
  locales: [[lang, lang]],
  hash: true,
  logo: 'https://www.nocobase.com/images/logo.png',
  navs: [
    {
      title: 'Docs',
      path: '/',
      hidden: true,
    },
    {
      title: 'GitHub',
      path: 'https://github.com/nocobase/nocobase',
    },
  ],
  menus: {
    '/': parseMenuItems(menus, lang),
  },
});