const path = require('path')
const fs = require('fs')

const _ = require('lodash/fp')

const pluginCodes = {
  TICKER: 'ticker',
  EXCHANGE: 'exchange',
  WALLET: 'wallet',
  WALLET_SCORING: 'wallet-scoring',
  LAYER2: 'layer2',
  SMS: 'sms',
  EMAIL: 'email',
  ZERO_CONF: 'zero-conf',
  COMPLIANCE: 'compliance'
}

module.exports = _.assign({load}, pluginCodes)

function load (type, pluginCode) {
  if (!_.includes(type, _.values(pluginCodes))) {
    throw new Error(`Unallowed plugin type: ${type}`)
  }

  if (!pluginCode) throw new Error(`No plugin defined for ${type}`)

  if (pluginCode.search(/[a-z0-9-]/) === -1) {
    throw new Error(`Unallowed plugin name: ${pluginCode}`)
  }

  return require(`./plugins/${type}/${pluginCode}/${pluginCode}`)
}
