'use strict'
const _isObject = require('lodash/isObject')
const defaultOrderErrorHandler = require('./default_handlers/orders_order_error')
const defaultErrorInsufficientBalanceHandler = require('./default_handlers/error_insufficient_balance')
const defaultErrorMinimumSizeHandler = require('./default_handlers/error_minimum_size')
/**
* Attaches default handlers if not supplied & returns the algo order definition
*
* @param {object} definition - algorithmic order definition
* @returns {object} ao
*/
const defineAlgoOrder = (definition = {}) => {
const { events } = definition
if (!_isObject(events)) {
throw new Error('algo definition defines no events')
} else if (!_isObject(events.orders)) {
throw new Error('algo definition defines no order events')
}
if (!events.orders.order_error) { // estlint-disable-line
events.orders.order_error = defaultOrderErrorHandler // eslint-disable-line
}
if (!events.errors) {
events.errors = {}
}
if (!events.errors.minimum_size) {
events.errors.minimum_size = defaultErrorMinimumSizeHandler
}
if (!events.errors.insufficient_balance) {
events.errors.insufficient_balance = defaultErrorInsufficientBalanceHandler
}
return definition
}
module.exports = defineAlgoOrder