#!/usr/bin/env node
const stringify = require('json-stringify-pretty-compact');

const definitions = require('../lib/config/definitions');
const defaultsParser = require('../lib/config/defaults');
const cliParser = require('../lib/config/cli');
const envParser = require('../lib/config/env');

/* eslint-disable no-console */
// Print table header
console.log('## Configuration Options');
console.log('');
console.log('<table>');
console.log('<tr>');
const columns = [
  'Name',
  'Description',
  'Type',
  'Default value',
  'Environment',
  'CLI',
];
columns.forEach(column => {
  console.log(`  <th>${column}</th>`);
});
console.log('</tr>');
const options = definitions.getOptions();
options.forEach(option => {
  let optionDefault = defaultsParser.getDefault(option);
  if (optionDefault !== '') {
    optionDefault = `<pre>${stringify(optionDefault)}</pre>`;
  }
  let envName = envParser.getEnvName(option);
  if (envName.length) {
    envName = `\`${envName}\``;
  }
  let cliName = cliParser.getCliName(option);
  if (cliName.length) {
    cliName = `\`${cliName}\``;
  }
  console.log(
    `<tr>
  <td>\`${option.name}\`</td>
  <td>${option.description}</td>
  <td>${option.type}</td>
  <td>${optionDefault}</td>
  <td>${envName}</td>
  <td>${cliName}<td>
</tr>`
  );
});
/* eslint-enable no-console */