import {
  UiPoolDataProvider,
} from '@aave/contract-helpers';
import { formatReserves } from '@aave/math-utils';
import { ApyData } from '../types';

async function getAaveSupplyRates(network: string, contract: UiPoolDataProvider, poolAddressProvider: string): Promise<ApyData[]> {
  const reserves = await contract.getReservesHumanized({
    lendingPoolAddressProvider: poolAddressProvider,
  });

  const currentTimestamp = Math.floor(Date.now() / 1000);

  const formattedPoolReserves = formatReserves({
        reserves: reserves.reservesData,
        currentTimestamp,
        marketReferenceCurrencyDecimals:
          reserves.baseCurrencyData.marketReferenceCurrencyDecimals,
        marketReferencePriceInUsd: reserves.baseCurrencyData.marketReferenceCurrencyPriceInUsd,
      });

  const result: ApyData[] = formattedPoolReserves.map((reserve) => ({
    token_symbol: reserve.symbol,
    apy: parseFloat(reserve.supplyAPY),
    protocol_name: 'Aave',
    network: network,
  }));

  return result;
}

export { getAaveSupplyRates };