import { replaceImportAddresses } from "flow-js-testing";
import { getEnvironment, reportMissingImports } from 'utils'

export const CODE = `
{{ code }}
`;

/**
* Method to generate cadence code for TestAsset
* @param {Object.<string, string>} addressMap - contract name as a key and address where it's deployed as value
* @param {( "emulator" | "testnet" | "mainnet" )} [env] - current working environment, defines default deployed contracts
*/
export const {{ assetName }}Template = (addressMap = {}, env = "testnet") => {
    const envMap = getEnvironment(env);
    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);
};

// TODO: compare number of arguments
// TODO: pass signers
// TOOD: compare number of signers
// TODO: create specific method to scripts, transactions and contracts

export const  {{ assetName }} = (addressMap = {}, env = "testnet", args = []) => {
  // TODO: implement sendTransaction or executeScript, based on context
  const code = {{ assetName}}Template(addressMap, env, args)
}
