import { useMemo } from 'react'
import Image from 'next/image'
import { useTranslations } from 'next-intl'
import { CHAINS_BY_ID } from '@constants/chains'
import { DATA_PLACEHOLDER } from '@/constants/placeholders'
import { Token } from '@/utils/types'
import { useUsdSlippage } from '@hooks/useUsdSlippage'
import { formatBigIntToString } from '@/utils/bigint/format'
import { formatSlippage } from '@/utils/formatSlippage'
const SwapExchangeRateInfo = ({
fromAmount,
fromToken,
toToken,
exchangeRate,
toChainId,
outputAmount,
isQuoteLoading,
}: {
fromAmount: bigint
fromToken: Token
toToken: Token
exchangeRate: bigint
toChainId: number
outputAmount: bigint
isQuoteLoading: boolean
}) => {
const safeExchangeRate = useMemo(() => exchangeRate ?? 0n, [exchangeRate])
const safeFromAmount = useMemo(() => fromAmount ?? 0n, [fromAmount])
const formattedExchangeRate = formatBigIntToString(safeExchangeRate, 18, 5)
// Calculate USD-based slippage
const { slippage, isLoading, error, textColor } = useUsdSlippage({
originToken: fromToken,
destToken: toToken,
originChainId: toChainId, // Swap happens on same chain
destChainId: toChainId,
inputAmount: safeFromAmount > 0n ? safeFromAmount : null,
outputAmount: outputAmount > 0n ? outputAmount : null,
})
const expectedToChain = useMemo(() => {
return toChainId &&
{t('Expected price on')}
{expectedToChain}{t('Slippage')}
{shouldShow ? ( <> {error && ( {t(error)} )} {!error && slippage !== null && ( {formatSlippage(slippage)} )} {!error && slippage === null && ( {DATA_PLACEHOLDER} )} > ) : ( {DATA_PLACEHOLDER} )}