# twap/meta/gen_preview.js

    'use strict'

    const generateOrder = require('../util/generate_order')

    /**
     * Generates an array of preview orders which show what could be expected if
     * an instance of TWAP was executed with the specified parameters.
     *
     * Part of the `meta` handler section.
     *
     * @memberOf module:TWAP
     * @param {object} args - instance parameters
     * @returns {object[]} previewOrders
     */
    const genPreview = (args = {}) => {
      const { sliceInterval, amount } = args
      const m = amount < 0 ? -1 : 1
      const startTS = Date.now()
      const orders = []

      let remAmount = Math.abs(amount)
      let o
      let ts = Date.now()
      let delay

      while (remAmount > 0) {
        o = generateOrder({
          remainingAmount: remAmount * m,
          args
        }, 'PRICE')

        if (o === null) {
          break
        }

        o.amount = Math.min(Math.abs(o.amount), remAmount) * m
        remAmount -= Math.abs(o.amount)

        orders.push(o)

        // Convert duration to timeout
        let currIntervalPos = ((ts - startTS) / sliceInterval)
        currIntervalPos -= Math.floor(currIntervalPos)

        delay = (sliceInterval * (1 - currIntervalPos)) + 100

        if (remAmount > 0) {
          orders.push({
            label: `DELAY ${Math.floor(delay / 1000)}s`
          })
        }

        ts += delay
      }

      return orders
    }

    module.exports = genPreview