const e=require(`../../../constants/chains.constants.cjs`),t=require(`../../../constants/protocol.constants.cjs`),n=require(`../../../error-handling/error-codes.constants.cjs`),r=require(`../../utils/caseInsensitive.utils.cjs`),i=require(`../../utils/tron.utils.cjs`),a=require(`../../../error-handling/logger.cjs`),o=require(`../../../externalABIs/index.cjs`),s=require(`../../utils/tronSimulation.utils.cjs`),c=require(`./waitForErc20Approvals.cjs`);var l=async(l,u,d,f,p,m,h,g,_,v=!0)=>{let y=l.getTronWeb(),b=i.evmHexToTronBase58Address(f.erc20TokenAddress),x=await l.getEthereumAddressByChain(u),{hinkalAddress:S,hinkalABI:C}=e.networkRegistry[u].contractData,w=y.contract(C,i.evmHexToTronBase58Address(S)),T=g??w,E=_??w;if(!T.address)throw Error(`contractForApproval address not set`);if(!E.address)throw Error(`contractForTransaction address not set`);let D=r.caseInsensitiveEqual(f.erc20TokenAddress,t.zeroAddress);if(!D&&d>0n){let e=T.address;if(!e)throw Error(`token approval spender not set`);let n=d,r=await y.contract(o.ERC20ABI,b).allowance(x,e).call({from:x});if(BigInt(String(r))<n){let{transaction:r}=await y.transactionBuilder.triggerSmartContract(b,`approve(address,uint256)`,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN},[{type:`address`,value:e},{type:`uint256`,value:n.toString()}],x),i=await y.trx.sign(r),a=await y.trx.sendRawTransaction(i);if(!a.result){let e=a.code??`UNKNOWN`,t=a.message?Buffer.from(a.message,`hex`).toString():`no message`;throw Error(`Tron token approval failed: ${e} - ${t}`)}await c.waitForTronErc20Approvals(y,x,e,[{tokenAddress:b,requiredAmount:n}])}}let{a:O,b:k,c:A}=i.parseZkCalldata(p),j=await i.reorderZkCallData(!0,p,h,m,!1);if(!j)throw Error(`Tron proof signature not found`);let M=[j.v,j.r,j.s],N=[h.tokenNumber,h.nullifierAmount,h.outputAmount],P=i.circomDataToArray(m);if(v&&(await s.simulateTronTransaction(u,E.address,`transact`,E.abi,[M,O,k,A,N,P],x,D?d:0n),D)){let e=BigInt(await y.trx.getBalance(x)),r=BigInt(t.TRON_DEFAULT_FEE_LIMIT_SUN);try{let e=i.createTronCallData(E.abi,`transact`,[M,O,k,A,N,P]);r=await i.estimateTronFeeSunWithPadding(y,u,E.address,x,e,d)}catch(e){a.Logger.error(`Error estimating Tron transact fee`,e)}if(e<d+r)throw Error(n.insufficientResourcesErrorCodes.INSUFFICIENT_TRON_BALANCE_FOR_FEE)}let F=await E.transact(M,O,k,A,N,P).send({feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:D?Number(d):0}),I=typeof F==`string`?F:F?.txid??F?.transaction?.txID??F?.transaction?.txid;if(!I)throw Error(`Tron transact failed (missing txid)`);return I};exports.transactCallDirectTron=l;