import { BigNumberish, Contract } from 'ethers';
import { IAppToolkit } from '../../../app-toolkit/app-toolkit.interface';
import { Erc20 } from '../../../contract/contracts';
import { IMulticallWrapper } from '../../../multicall';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import { GetAddressesParams, DefaultAppTokenDefinition, GetDefinitionsParams, GetUnderlyingTokensParams, GetPricePerShareParams, GetDataPropsParams, GetDisplayPropsParams } from '../../../position/template/app-token.template.types';
import { PancakeswapContractFactory } from '../contracts';
export declare type PancakeswapPoolTokenDataProps = {
    swapAddress: string;
    liquidity: number;
    reserves: number[];
    apy: number;
    fee: number;
};
export declare type PancakeswapPoolDefinition = {
    address: string;
    swapAddress: string;
};
export declare type ResolvePoolCountParams<T extends Contract> = {
    contract: T;
    multicall: IMulticallWrapper;
};
export declare type ResolveSwapAddressParams<T extends Contract> = {
    contract: T;
    poolIndex: number;
    multicall: IMulticallWrapper;
};
export declare type ResolveTokenAddressParams<T extends Contract> = {
    contract: T;
    multicall: IMulticallWrapper;
};
export declare type ResolveCoinAddressesParams<T extends Contract> = {
    contract: T;
    multicall: IMulticallWrapper;
};
export declare type ResolveReservesParams<T extends Contract> = {
    contract: T;
    multicall: IMulticallWrapper;
};
export declare type ResolveFeesParams<T extends Contract> = {
    contract: T;
    multicall: IMulticallWrapper;
};
export declare abstract class PancakeswapPoolDynamicTokenFetcher<R extends Contract, T extends Contract> extends AppTokenTemplatePositionFetcher<Erc20, PancakeswapPoolTokenDataProps, PancakeswapPoolDefinition> {
    protected readonly appToolkit: IAppToolkit;
    protected readonly contractFactory: PancakeswapContractFactory;
    abstract registryAddress: string;
    abstract resolveRegistry(address: string): R;
    abstract resolveStablePool(address: string): T;
    abstract resolvePoolCount(params: ResolvePoolCountParams<R>): Promise<BigNumberish>;
    abstract resolveSwapAddress(params: ResolveSwapAddressParams<R>): Promise<string>;
    abstract resolveTokenAddress(params: ResolveTokenAddressParams<T>): Promise<string>;
    abstract resolveCoinAddresses(params: ResolveCoinAddressesParams<T>): Promise<string[]>;
    abstract resolveReserves(params: ResolveReservesParams<T>): Promise<BigNumberish[]>;
    abstract resolveFees(params: ResolveFeesParams<T>): Promise<BigNumberish>;
    constructor(appToolkit: IAppToolkit, contractFactory: PancakeswapContractFactory);
    getContract(address: string): Erc20;
    getDefinitions({ multicall }: GetDefinitionsParams): Promise<{
        address: string;
        swapAddress: string;
    }[]>;
    getAddresses({ definitions }: GetAddressesParams<DefaultAppTokenDefinition>): Promise<string[]>;
    getUnderlyingTokenDefinitions({ definition, multicall, }: GetUnderlyingTokensParams<Erc20, PancakeswapPoolDefinition>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getPricePerShare({ multicall, definition, appToken, }: GetPricePerShareParams<Erc20, PancakeswapPoolTokenDataProps, PancakeswapPoolDefinition>): Promise<number[]>;
    getDataProps(params: GetDataPropsParams<Erc20, PancakeswapPoolTokenDataProps, PancakeswapPoolDefinition>): Promise<{
        fee: number;
        apy: number;
        swapAddress: string;
        liquidity: number;
        reserves: number[];
    }>;
    getLabel({ appToken }: GetDisplayPropsParams<Erc20, PancakeswapPoolTokenDataProps, PancakeswapPoolDefinition>): Promise<string>;
    getSecondaryLabel({ appToken, }: GetDisplayPropsParams<Erc20, PancakeswapPoolTokenDataProps, PancakeswapPoolDefinition>): Promise<string>;
    getStatsItems({ appToken, }: GetDisplayPropsParams<Erc20, PancakeswapPoolTokenDataProps, PancakeswapPoolDefinition>): Promise<({
        label: string;
        value: import("../../../position/display.interface").DollarDisplayItem;
    } | {
        label: string;
        value: import("../../../position/display.interface").PercentageDisplayItem;
    })[]>;
}
