/** pragma type transaction **/

import {
  getEnvironment,
  replaceImportAddresses,
  reportMissingImports,
  reportMissing,
  sendTransaction
} from '{{ ixDependency }}'

export const CODE = `
{{{ code }}}
`;

/**
* Method to generate cadence code for {{ assetName }} transaction
* @param {Object.<string, string>} addressMap - contract name as a key and address where it's deployed as value
*/
export const {{ assetName }}Template = async (addressMap = {}) => {
  const envMap = await getEnvironment();
  const fullMap = {
  ...envMap,
  ...addressMap,
  };

  // If there are any missing imports in fullMap it will be reported via console
  reportMissingImports(CODE, fullMap, `{{ name }} =>`)

  return replaceImportAddresses(CODE, fullMap);
};


/**
* Sends {{ assetName }} transaction to the network
* @param {Object.<string, string>} props.addressMap - contract name as a key and address where it's deployed as value
* @param Array<*> props.args - list of arguments
* @param Array<*> props.signers - list of signers
*/
export const {{ assetName }} = async (props = {}) => {
  const { addressMap, args = [], signers = [] } = props;
  const code = await {{assetName}}Template(addressMap);

  reportMissing("arguments", args.length, {{ argsAmount }}, `{{ assetName }} =>`);
  reportMissing("signers", signers.length, {{ signersAmount }}, `{{ assetName }} =>`);

  return sendTransaction({code, processed: true, ...props})
}