const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`../../API/getTokenPrice.cjs`),i=require(`./caseInsensitive.utils.cjs`),a=require(`../web3/etherFunctions.cjs`),o=require(`./erc20tokenFunctions.cjs`),s=require(`../../error-handling/logger.cjs`);var c=r=>{if(!r)return n.EXTENDED_NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS;let i=t.zeroAddress;e.isSolanaLike(r)&&(i=t.solanaNativeAddress);let a=o.getERC20Token(i,r)?.symbol;return e.isSolanaLike(r)&&a?[a]:a&&!n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r).includes(a)?[a,...n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)]:n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)},l=(e,t)=>{let r=e*t.variableRate/n.BPS_DENOMINATOR;return t.flatFee+r},u=async(e,t,c,u)=>{let d=o.getERC20Token(u.feeToken,e),f;if(!d||i.caseInsensitiveEqual(u.feeToken,t.erc20TokenAddress)||u.variableRate===0n)f=l(c,u);else{let i=0n;try{let{prices:o}=await r.getTokenPrices(e,[t.erc20TokenAddress,d.erc20TokenAddress]),[s,l]=o;if(!s||!l)throw Error(`failed to get token prices`);i=a.getAmountInWei(d,(Number(a.getAmountInToken(t,c))*s*Number(u.variableRate)/Number(n.BPS_DENOMINATOR)/l).toFixed(d.decimals))}catch(e){s.Logger.error(`calculateModifiedFeeStructure: failed to price cross-token variable fee, charging gas fee only`,e)}f=u.flatFee+i}return{feeToken:u.feeToken,flatFee:f,variableRate:0n}},d=(e,t)=>{let r=-e;return t.variableRate===0n?r-t.flatFee:(r-t.flatFee)*n.BPS_DENOMINATOR/(n.BPS_DENOMINATOR+t.variableRate)};exports.calculateModifiedFeeStructure=u,exports.calculateTotalFee=l,exports.calculateWithdrawalAmount=d,exports.getGasTokenSymbols=c;