import { BigNumberish, Contract } from 'ethers/lib/ethers';
import { IAppToolkit } from '../../app-toolkit/app-toolkit.interface';
import { ContractType } from '../../position/contract.interface';
import { DefaultDataProps, DisplayProps, StatsItem } from '../../position/display.interface';
import { ContractPositionBalance, RawContractPositionBalance } from '../../position/position-balance.interface';
import { PositionFetcher } from '../../position/position-fetcher.interface';
import { ContractPosition } from '../../position/position.interface';
import { Network } from '../../types/network.interface';
import { DefaultContractPositionDefinition, GetDataPropsParams, GetDefinitionsParams, GetDisplayPropsParams, GetTokenBalancesParams, GetTokenDefinitionsParams, UnderlyingTokenDefinition } from './contract-position.template.types';
import { PositionFetcherTemplateCommons } from './position-fetcher.template.types';
export declare abstract class ContractPositionTemplatePositionFetcher<T extends Contract, V extends DefaultDataProps = DefaultDataProps, R extends DefaultContractPositionDefinition = DefaultContractPositionDefinition> implements PositionFetcher<ContractPosition<V>>, PositionFetcherTemplateCommons {
    protected readonly appToolkit: IAppToolkit;
    appId: string;
    groupId: string;
    network: Network;
    abstract groupLabel: string;
    isExcludedFromBalances: boolean;
    isExcludedFromExplore: boolean;
    isExcludedFromTvl: boolean;
    constructor(appToolkit: IAppToolkit);
    abstract getContract(address: string): T;
    abstract getDefinitions(params: GetDefinitionsParams): Promise<R[]>;
    abstract getTokenDefinitions(_params: GetTokenDefinitionsParams<T, R>): Promise<UnderlyingTokenDefinition[] | null>;
    getDataProps(_params: GetDataPropsParams<T, V, R>): Promise<V>;
    abstract getLabel(params: GetDisplayPropsParams<T, V, R>): Promise<string>;
    getLabelDetailed(_params: GetDisplayPropsParams<T, V>): Promise<DisplayProps['labelDetailed']>;
    getSecondaryLabel(_params: GetDisplayPropsParams<T, V>): Promise<DisplayProps['secondaryLabel']>;
    getTertiaryLabel({ contractPosition }: GetDisplayPropsParams<T, V>): Promise<DisplayProps['tertiaryLabel']>;
    getImages({ contractPosition }: GetDisplayPropsParams<T, V>): Promise<DisplayProps['images']>;
    getStatsItems({ contractPosition }: GetDisplayPropsParams<T, V>): Promise<DisplayProps['statsItems']>;
    getPositions(): Promise<{
        dataProps: V;
        displayProps: {
            label: string;
            labelDetailed: string | undefined;
            secondaryLabel: string | number | import("../../position/display.interface").DollarDisplayItem | import("../../position/display.interface").PercentageDisplayItem | undefined;
            tertiaryLabel: string | number | import("../../position/display.interface").DollarDisplayItem | import("../../position/display.interface").PercentageDisplayItem | undefined;
            images: string[];
            statsItems: StatsItem[] | undefined;
        };
        address: string;
        network: Network;
        type: ContractType.POSITION;
        tokens: import("../../position/display.interface").WithMetaType<import("../../position/position.interface").Token>[];
        appId: string;
        groupId: string;
        key: string;
        groupLabel?: string | undefined;
    }[]>;
    getAccountAddress(address: string): Promise<string>;
    getPositionsForBalances(): Promise<ContractPosition<V>[]>;
    filterPositionsForAddress(address: string, positions: ContractPosition<V>[]): Promise<ContractPosition<V>[]>;
    abstract getTokenBalancesPerPosition({ address, contractPosition, contract, multicall, }: GetTokenBalancesParams<T, V>): Promise<BigNumberish[]>;
    getBalances(_address: string): Promise<ContractPositionBalance<V>[]>;
    getRawBalances(_address: string): Promise<RawContractPositionBalance[]>;
    drillRawBalances(balances: RawContractPositionBalance[]): Promise<ContractPositionBalance<V>[]>;
}
