import { URLSearchParams } from 'url';
import isEmpty from 'lodash/isEmpty.js';
import omitBy from 'lodash/omitBy.js';

const getBalanceTransactions = async ($) => {
  let response;
  let lastId = undefined;

  do {
    const params = {
      starting_after: lastId,
      ending_before: $.flow.lastInternalId,
    };
    const queryParams = new URLSearchParams(omitBy(params, isEmpty));
    const requestPath = `/v1/balance_transactions${
      queryParams.toString() ? `?${queryParams.toString()}` : ''
    }`;

    response = (await $.http.get(requestPath)).data;
    for (const entry of response.data) {
      $.pushTriggerItem({
        raw: entry,
        meta: {
          internalId: entry.id,
        },
      });
      lastId = entry.id;
    }
  } while (response.has_more);
};

export default getBalanceTransactions;
