import { Assets, Data, UTxO } from '@lucid-evolution/lucid';
import { createScriptAddress, SystemParams } from '../../src';
import { IndigoTestContext, runAndAwaitTxBuilder } from '../test-helpers';
import { getNewUtxosAtAddressAfterAction } from '../utils';

export async function createUtxosAtInterestCollector(
  utxosNo: number,
  assets: Assets,
  sysParams: SystemParams,
  context: IndigoTestContext,
): Promise<UTxO[]> {
  const interestCollectorAddr = createScriptAddress(
    context.lucid.config().network!,
    sysParams.validatorHashes.interestCollectionHash,
  );

  const tx = context.lucid.newTx();

  for (let i = 0; i < utxosNo; i++) {
    tx.pay.ToContract(
      interestCollectorAddr,
      { kind: 'inline', value: Data.void() },
      assets,
    );
  }

  const [_, utxos] = await getNewUtxosAtAddressAfterAction(
    context.lucid,
    interestCollectorAddr,
    () => runAndAwaitTxBuilder(context.lucid, tx),
  );

  if (utxos.length !== utxosNo)
    throw Error('Expected a different number of interest collectors');

  return utxos;
}
