#!/usr/bin/env node

'use strict';

process.title = 'bcoin';

if (process.argv.indexOf('--help') !== -1
    || process.argv.indexOf('-h') !== -1) {
  console.error('See the bcoin wiki at: https://github.com/bcoin-org/bcoin/wiki.');
  process.exit(1);
  throw new Error('Could not exit.');
}

if (process.argv.indexOf('--version') !== -1
    || process.argv.indexOf('-v') !== -1) {
  const pkg = require('../package.json');
  console.log(pkg.version);
  process.exit(0);
  throw new Error('Could not exit.');
}

const FullNode = require('../lib/node/fullnode');

const node = new FullNode({
  config: true,
  argv: true,
  env: true,
  logFile: true,
  logConsole: true,
  logLevel: 'debug',
  db: 'leveldb',
  persistent: true,
  workers: true,
  listen: true,
  loader: require
});

// Temporary hack
if (!node.config.bool('no-wallet') && !node.has('walletdb')) {
  const plugin = require('../lib/wallet/plugin');
  node.use(plugin);
}

process.on('unhandledRejection', (err, promise) => {
  throw err;
});

(async () => {
  await node.ensure();
  await node.open();
  await node.connect();
  node.startSync();
})().catch((err) => {
  console.error(err.stack);
  process.exit(1);
});
