import { BigNumberish, Contract } from 'ethers/lib/ethers';
import { IAppToolkit } from '../../app-toolkit/app-toolkit.interface';
import { IMulticallWrapper } from '../../multicall';
import { DisplayProps } from '../../position/display.interface';
import { AppTokenPositionBalance, RawAppTokenBalance } from '../../position/position-balance.interface';
import { PositionFetcher } from '../../position/position-fetcher.interface';
import { AppTokenPosition } from '../../position/position.interface';
import { Network } from '../../types/network.interface';
import { DefaultAppTokenDefinition, DefaultAppTokenDataProps, GetAddressesParams, GetDataPropsParams, GetDefinitionsParams, GetDisplayPropsParams, GetPricePerShareParams, GetPriceParams, GetTokenPropsParams, GetUnderlyingTokensParams, UnderlyingTokenDefinition } from './app-token.template.types';
import { PositionFetcherTemplateCommons } from './position-fetcher.template.types';
export declare abstract class AppTokenTemplatePositionFetcher<T extends Contract, V extends DefaultAppTokenDataProps = DefaultAppTokenDataProps, R extends DefaultAppTokenDefinition = DefaultAppTokenDefinition> implements PositionFetcher<AppTokenPosition<V>>, PositionFetcherTemplateCommons {
    protected readonly appToolkit: IAppToolkit;
    appId: string;
    groupId: string;
    network: Network;
    isDebt: boolean;
    abstract groupLabel: string;
    isExcludedFromBalances: boolean;
    isExcludedFromExplore: boolean;
    isExcludedFromTvl: boolean;
    minLiquidity: number;
    constructor(appToolkit: IAppToolkit);
    abstract getContract(address: string): T;
    abstract getAddresses(params: GetAddressesParams): string[] | Promise<string[]>;
    getDefinitions(params: GetDefinitionsParams): Promise<R[]>;
    abstract getUnderlyingTokenDefinitions(_params: GetUnderlyingTokensParams<T, R>): Promise<UnderlyingTokenDefinition[]>;
    getSymbol({ address, multicall }: GetTokenPropsParams<T, R>): Promise<string>;
    getDecimals({ address, multicall }: GetTokenPropsParams<T, R>): Promise<number>;
    getSupply({ address, multicall }: GetTokenPropsParams<T, R>): Promise<BigNumberish>;
    abstract getPricePerShare(_params: GetPricePerShareParams<T, V, R>): Promise<number[]>;
    getPrice({ appToken }: GetPriceParams<T, V, R>): Promise<number>;
    getLiquidity({ appToken }: GetDataPropsParams<T, V, R>): Promise<number>;
    getReserves({ appToken }: GetDataPropsParams<T, V, R>): Promise<number[]>;
    getApy(_params: GetDataPropsParams<T, V, R>): Promise<number>;
    getDataProps(params: GetDataPropsParams<T, V, R>): Promise<V>;
    getLabel({ appToken }: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['label']>;
    getLabelDetailed(_params: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['labelDetailed']>;
    getSecondaryLabel({ appToken }: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['secondaryLabel']>;
    getTertiaryLabel({ appToken }: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['tertiaryLabel']>;
    getImages({ appToken }: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['images']>;
    getBalanceDisplayMode(_params: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['balanceDisplayMode']>;
    getStatsItems({ appToken }: GetDisplayPropsParams<T, V, R>): Promise<DisplayProps['statsItems']>;
    getPositionsForBatch(definitions: R[]): Promise<AppTokenPosition<V>[]>;
    getPositions(): Promise<AppTokenPosition<V>[]>;
    getAccountAddress(address: string): Promise<string>;
    getPositionsForBalances(): Promise<AppTokenPosition<V>[]>;
    getBalancePerToken({ address, appToken, multicall, }: {
        address: string;
        appToken: AppTokenPosition;
        multicall: IMulticallWrapper;
    }): Promise<BigNumberish>;
    getBalances(_address: string): Promise<AppTokenPositionBalance<V>[]>;
    getRawBalances(_address: string): Promise<RawAppTokenBalance[]>;
    drillRawBalances(balances: RawAppTokenBalance[]): Promise<AppTokenPositionBalance<V>[]>;
}
