require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/ethereum-network.types.cjs`);require(`../../types/index.cjs`);const r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`./etherFunctions.cjs`),a=require(`../../error-handling/logError.cjs`);require(`../../error-handling/index.cjs`),require(`../../constants/index.cjs`);let o=require(`ethers`);var s=async(e,n,i,a)=>{let o=(await Promise.all([100,500,3e3,1e4].map(async e=>({poolAddress:await n.getPool(i,a,e),fee:e})))).filter(({poolAddress:e})=>e!==t.zeroAddress),s=await Promise.all(o.map(async t=>({poolAddress:t.poolAddress,fee:t.fee,token1Balance:await e.balanceOf(t.poolAddress)}))),c=s.map(e=>e.token1Balance).reduce((e,t)=>t>=e?t:e,0n);if(c===0n)throw Error(r.transactionErrorCodes.UNISWAP_NOT_ENOUGH_LIQUIDITY);return s.find(e=>e.token1Balance===c)},c=async(t,r,i,o,s,c)=>{try{if(!e.networkRegistry[r].quoterV2Address)throw Error(`No Quoter Contract Provided`);return(await t.getContractWithFetcherByChainId(r,n.ContractType.UniswapV3QuoterContract,e.networkRegistry[r].quoterV2Address).quoteExactInputSingle.staticCall({tokenIn:i.wrappedErc20TokenAddress??i.erc20TokenAddress,tokenOut:o.wrappedErc20TokenAddress??o.erc20TokenAddress,fee:s,amountIn:c,sqrtPriceLimitX96:0})).amountOut}catch(e){throw a.logError(e),e}},l=async(t,r,i,a)=>{try{let o=t.getContractWithFetcherByChainId(r,n.ContractType.UniswapV3FactoryContract,e.networkRegistry[r].uniswapV3FactoryAddress),{fee:c}=await s(t.getContractWithFetcherByChainId(r,n.ContractType.ERC20Contract,a.wrappedErc20TokenAddress??a.erc20TokenAddress),o,i.wrappedErc20TokenAddress??i.erc20TokenAddress,a.wrappedErc20TokenAddress??a.erc20TokenAddress);return c}catch(e){throw console.log(`Error in getUniswapFee`,e),e}},u=async(e,t,n,a,s)=>{try{let r=await l(e,t,a,s),u=o.ethers.AbiCoder.defaultAbiCoder().encode([`uint24`],[r]);return{tokenPrice:await c(e,t,a,s,r,i.getAmountInWei(a,n)),poolFee:u}}catch{throw Error(r.transactionErrorCodes.NO_UNISWAP_PRICE)}};exports.getUniswapFee=l,exports.getUniswapPrice=u,exports.getUniswapPriceHelper=c,exports.searchPoolAndFee=s;