import { BigNumberish, Contract } from 'ethers';
import { IAppToolkit } from '../../app-toolkit/app-toolkit.interface';
import { IMulticallWrapper } from '../../multicall';
import { ContractPositionTemplatePositionFetcher } from '../../position/template/contract-position.template.position-fetcher';
import { GetTokenDefinitionsParams, UnderlyingTokenDefinition, GetDataPropsParams, GetDisplayPropsParams, GetTokenBalancesParams, GetDefinitionsParams } from '../../position/template/contract-position.template.types';
export declare enum RewardRateUnit {
    BLOCK = "block",
    SECOND = "second"
}
export declare type MasterChefContractPositionDataProps = {
    poolIndex: number;
    liquidity: number;
    isActive: boolean;
    apy: number;
    positionKey: string;
};
export declare type MasterChefContractPositionDefinition = {
    address: string;
    poolIndex: number;
};
export declare type GetMasterChefDataPropsParams<T extends Contract> = GetDataPropsParams<T, MasterChefContractPositionDataProps, MasterChefContractPositionDefinition>;
export declare type GetMasterChefTokenBalancesParams<T extends Contract> = GetTokenBalancesParams<T, MasterChefContractPositionDataProps>;
export declare abstract class MasterChefTemplateContractPositionFetcher<T extends Contract, V extends MasterChefContractPositionDataProps = MasterChefContractPositionDataProps> extends ContractPositionTemplatePositionFetcher<T, V, MasterChefContractPositionDefinition> {
    protected readonly appToolkit: IAppToolkit;
    constructor(appToolkit: IAppToolkit);
    abstract chefAddress: string;
    abstract getPoolLength(contract: T): Promise<BigNumberish>;
    abstract getStakedTokenAddress(contract: T, poolIndex: number, multicall: IMulticallWrapper): Promise<string>;
    abstract getRewardTokenAddress(contract: T, poolIndex: number, multicall: IMulticallWrapper): Promise<string | string[]>;
    rewardRateUnit: RewardRateUnit;
    abstract getTotalAllocPoints(params: GetMasterChefDataPropsParams<T>): Promise<BigNumberish>;
    abstract getTotalRewardRate(params: GetMasterChefDataPropsParams<T>): Promise<BigNumberish>;
    abstract getPoolAllocPoints(params: GetMasterChefDataPropsParams<T>): Promise<BigNumberish>;
    abstract getStakedTokenBalance(params: GetMasterChefTokenBalancesParams<T>): Promise<BigNumberish>;
    abstract getRewardTokenBalance(params: GetMasterChefTokenBalancesParams<T>): Promise<BigNumberish | BigNumberish[]>;
    getDefinitions(_params: GetDefinitionsParams): Promise<MasterChefContractPositionDefinition[]>;
    getTokenDefinitions({ contract, definition, multicall, }: GetTokenDefinitionsParams<T, MasterChefContractPositionDefinition>): Promise<UnderlyingTokenDefinition[] | null>;
    getReserve({ contractPosition, multicall }: GetDataPropsParams<T, V, MasterChefContractPositionDefinition>): Promise<number>;
    getRewardRates(params: GetDataPropsParams<T, V, MasterChefContractPositionDefinition>): Promise<BigNumberish[]>;
    getDataProps(params: GetDataPropsParams<T, V, MasterChefContractPositionDefinition>): Promise<V>;
    getLabel({ contractPosition }: GetDisplayPropsParams<T>): Promise<string>;
    getImages({ contractPosition }: GetDisplayPropsParams<T, V>): Promise<string[]>;
    getTokenBalancesPerPosition(params: GetTokenBalancesParams<T, MasterChefContractPositionDataProps>): Promise<BigNumberish[]>;
}
