# accumulate_distribute/meta/gen_preview.js

    'use strict'

    const genCID = require('../../util/gen_client_id')
    const { Order } = require('bfx-api-node-models')
    const genOrderAmounts = require('../util/gen_order_amounts')

    /**
     * Generates an array of preview orders which show what could be expected if
     * an instance of AccumulateDistribute was executed with the specified
     * parameters.
     *
     * Part of the `meta` handler section.
     *
     * @memberOf module:AccumulateDistribute
     *
     * @param {object} args - instance parameters
     * @returns {object[]} previewOrders
     */
    const genPreview = (args = {}) => {
      const {
        symbol, sliceInterval, intervalDistortion, _margin, orderType, limitPrice,
        hidden
      } = args

      const orderAmounts = genOrderAmounts(args)
      const orders = []

      orderAmounts.map((amount, i) => {
        if (orderType === 'MARKET') {
          orders.push(new Order({
            symbol,
            amount,
            hidden,
            cid: genCID(),
            type: _margin ? 'MARKET' : 'EXCHANGE MARKET'
          }))
        } else if (orderType === 'LIMIT') {
          orders.push(new Order({
            symbol,
            amount,
            hidden,
            price: limitPrice,
            cid: genCID(),
            type: _margin ? 'LIMIT' : 'EXCHANGE LIMIT'
          }))
        } else if (orderType === 'RELATIVE') {
          orders.push(new Order({
            symbol,
            amount,
            hidden,
            price: 'RELATIVE',
            cid: genCID(),
            type: _margin ? 'LIMIT' : 'EXCHANGE LIMIT'
          }))
        } else {
          throw new Error(`unknown order type: ${orderType}`)
        }

        const m = Math.random() > 0.5 ? 1 : -1
        const interval = intervalDistortion === 0
          ? sliceInterval
          : sliceInterval * (1 + (Math.random() * intervalDistortion * m))

        if (i !== orderAmounts.length - 1) {
          orders.push({
            label: `DELAY ${Math.floor(interval / 1000)}s`
          })
        }
      })

      return orders
    }

    module.exports = genPreview