const _ = require('lodash/fp')

const E = function (name) {
  var CustomErr = function (msg) {
    this.message = msg || _.startCase(name)
    this.name = name
    Error.captureStackTrace(this, CustomErr)
  }
  CustomErr.prototype = Object.create(Error.prototype)
  CustomErr.prototype.constructor = CustomErr
  CustomErr.code = name

  return CustomErr
}

module.exports = E

function register(errorName) {
  E[errorName] = E(errorName)
}

register('BadNumberError')
register('NoDataError')
register('InsufficientFundsError')
register('StaleTxError')
register('RatchetError')
register('NotImplementedError')
