const _ = require('lodash/fp')

const txBatching = require('./tx-batching')
const wallet = require('./wallet')

function submitBatch(settings, batch) {
  txBatching.getBatchTransactions(batch).then(txs => {
    if (_.isEmpty(txs)) return Promise.resolve()
    return wallet
      .sendCoinsBatch(settings, txs, batch.crypto_code)
      .then(res => txBatching.confirmSentBatch(batch, res))
      .catch(err => txBatching.setErroredBatch(batch, err.message))
  })
}

function processBatches(settings, lifecycle) {
  return txBatching.getBatchesByStatus(['open']).then(batches => {
    _.each(batch => {
      const elapsedMS = batch.time_elapsed * 1000

      if (elapsedMS >= lifecycle) {
        return txBatching
          .closeTransactionBatch(batch)
          .then(() => submitBatch(settings, batch))
      }
    }, batches)
  })
}

module.exports = processBatches
