#!/usr/bin/env node

require('../lib/environment-helper')
const _ = require('lodash/fp')
const common = require('../lib/blockchain/common')
const { utils: coinUtils } = require('@lamassu/coins')

const cryptos = coinUtils.cryptoCurrencies()

const PLUGINS = {
  BTC: require('../lib/blockchain/bitcoin.js'),
  BCH: require('../lib/blockchain/bitcoincash.js'),
  DASH: require('../lib/blockchain/dash.js'),
  ETH: require('../lib/blockchain/ethereum.js'),
  LTC: require('../lib/blockchain/litecoin.js'),
  XMR: require('../lib/blockchain/monero.js'),
  ZEC: require('../lib/blockchain/zcash.js')
}

function plugin (crypto) {
  const plugin = PLUGINS[crypto.cryptoCode]
  if (!plugin) throw new Error(`No such plugin: ${crypto.cryptoCode}`)
  return plugin
}

function isWalletNodeInstalled (status) {
  // From http://supervisord.org/subprocess.html#process-states
  return _.includes(status, ['STARTING', 'RUNNING', 'STOPPED', 'BACKOFF', 'STOPPING', 'EXITED', 'FATAL'])
}

function run () {
  _.forEach((crypto) => {
    if (!_.includes(crypto.cryptoCode, _.keys(PLUGINS))) return

    const cryptoPlugin = plugin(crypto)
    const status = common.es(`sudo supervisorctl status ${crypto.code} | awk '{ print $2 }'`).trim()

    if (!isWalletNodeInstalled(status)) return
    cryptoPlugin.updateCore(common.getBinaries(crypto.cryptoCode), _.includes(status, ['RUNNING', 'STARTING']))
  }, cryptos)
}

run()
