const $ = require('dekko');
const chalk = require('chalk');
const path = require('path');

function getFileName(filePath) {
  return filePath.slice(filePath.lastIndexOf(path.sep) + 1);
}

$('lib').isDirectory().hasFile('index.js').hasFile('index.d.ts');

$('lib/style').isDirectory().hasFile('index.css').hasFile('default.css');

$('lib/*')
  .filter(
    filename =>
      !filename.endsWith('index.js') &&
      !filename.endsWith('index.d.ts') &&
      !filename.endsWith('.map'),
  )
  .isDirectory()
  .filter(
    filename =>
      !filename.endsWith('style') && !filename.endsWith('_util') && !filename.endsWith('locale'),
  )
  .hasFile('index.js')
  .hasFile('index.d.ts')
  .hasDirectory('style');

$('lib/*/style').hasFile('css.js').hasFile('index.js');

// locale
const filterLocaleFile = filePath => {
  const fileName = getFileName(filePath);
  return (
    !fileName.endsWith('index.js') &&
    !fileName.endsWith('.d.ts') &&
    !fileName.endsWith('.map') &&
    !fileName.endsWith('style') &&
    !fileName.includes('-') &&
    !fileName.endsWith('LocaleReceiver.js') &&
    !fileName.endsWith('context.js')
  );
};
const localeFiles = $('lib/locale/*').filter(filterLocaleFile);
const localeProviderFiles = $('lib/locale-provider/*').filter(filterLocaleFile);

function compare(originFiles, targetFiles, targetPath) {
  originFiles.assert(
    `not exist in '${targetPath}'. Please use 'scripts/generateLegacyLocale.js' to refresh locale files.`,
    filePath => {
      const fileName = getFileName(filePath);

      return targetFiles.filenames.some(targetFilePath => getFileName(targetFilePath) === fileName);
    },
  );
}

compare(localeFiles, localeProviderFiles, '/locale-provider');
compare(localeProviderFiles, localeFiles, '/locale');

// eslint-disable-next-line no-console
console.log(chalk.green('✨ `lib` directory is valid.'));
