import { BigNumber } from 'ethers';
import { IAppToolkit } from '../../../app-toolkit/app-toolkit.interface';
import { DefaultDataProps, StatsItem } from '../../../position/display.interface';
import { MetaType } from '../../../position/position.interface';
import { ContractPositionTemplatePositionFetcher } from '../../../position/template/contract-position.template.position-fetcher';
import { DefaultContractPositionDefinition, GetDataPropsParams, GetDisplayPropsParams, GetTokenBalancesParams, GetTokenDefinitionsParams } from '../../../position/template/contract-position.template.types';
import { AbracadabraContractFactory, AbracadabraCauldron } from '../contracts';
interface AbracadabraCommonCauldronContractPositionDefinition extends DefaultContractPositionDefinition {
    type: 'REGULAR' | 'CONVEX' | 'GLP';
}
interface AbracadabraCauldronV1ContractPositionDefinition extends AbracadabraCommonCauldronContractPositionDefinition {
    version: 'V1';
    risk: 'MEDIUM' | 'LOW';
}
interface AbracadabraCauldronV2ContractPositionDefinition extends AbracadabraCommonCauldronContractPositionDefinition {
    version: 'V2';
}
interface AbracadabraCauldronV3ContractPositionDefinition extends AbracadabraCommonCauldronContractPositionDefinition {
    version: 'V3';
}
interface AbracadabraCauldronV4ContractPositionDefinition extends AbracadabraCommonCauldronContractPositionDefinition {
    version: 'V4';
}
interface AbracadabraCauldronProtocolOwnedDebtContractPositionDefinition extends AbracadabraCommonCauldronContractPositionDefinition {
    version: 'POD';
}
export declare type AbracadabraCauldronContractPositionDefinition = AbracadabraCauldronV1ContractPositionDefinition | AbracadabraCauldronV2ContractPositionDefinition | AbracadabraCauldronV3ContractPositionDefinition | AbracadabraCauldronV4ContractPositionDefinition | AbracadabraCauldronProtocolOwnedDebtContractPositionDefinition;
export interface AbracadabraCauldronDataProps extends DefaultDataProps {
    definition: AbracadabraCauldronContractPositionDefinition;
    supply: number;
    supplyUSD: number;
    borrow: number;
    borrowUSD: number;
    availableBorrow: number;
    borrowApy: number;
    borrowFee?: number;
    maxLTV?: number;
    liquidationFee?: number;
}
export declare abstract class AbracadabraCauldronContractPositionFetcher extends ContractPositionTemplatePositionFetcher<AbracadabraCauldron, AbracadabraCauldronDataProps, AbracadabraCauldronContractPositionDefinition> {
    protected readonly appToolkit: IAppToolkit;
    protected readonly contractFactory: AbracadabraContractFactory;
    marketLensAddress: string;
    cauldrons: AbracadabraCauldronContractPositionDefinition[];
    constructor(appToolkit: IAppToolkit, contractFactory: AbracadabraContractFactory);
    getContract(address: string): AbracadabraCauldron;
    getDefinitions(): Promise<AbracadabraCauldronContractPositionDefinition[]>;
    getTokenDefinitions(params: GetTokenDefinitionsParams<AbracadabraCauldron, AbracadabraCauldronContractPositionDefinition>): Promise<{
        metaType: MetaType;
        address: string;
        network: import("../../../types").Network;
    }[]>;
    private getRegularTokenDefinitions;
    private getConvexTokenDefinitions;
    private getGlpTokenDefinitions;
    private getMarketInfoCauldronV1;
    private getMarketInfoMarketLens;
    private getMarketInfoCauldronV2;
    private getMarketInfoCauldronV3Plus;
    private getMarketInfoProtocolOwnedDebt;
    private getMarketInfo;
    getDataProps(params: GetDataPropsParams<AbracadabraCauldron, AbracadabraCauldronDataProps, AbracadabraCauldronContractPositionDefinition>): Promise<AbracadabraCauldronDataProps>;
    getLabel({ contractPosition }: GetDisplayPropsParams<AbracadabraCauldron>): Promise<string>;
    getStatsItems({ contractPosition: { dataProps: { supply, supplyUSD, borrow, borrowUSD, availableBorrow, borrowApy, borrowFee, maxLTV, liquidationFee, }, }, }: GetDisplayPropsParams<AbracadabraCauldron, AbracadabraCauldronDataProps, DefaultContractPositionDefinition>): Promise<StatsItem[] | undefined>;
    private getClaimableTokensConvex;
    private getClaimableTokens;
    getTokenBalancesPerPosition(params: GetTokenBalancesParams<AbracadabraCauldron, AbracadabraCauldronDataProps>): Promise<(number | BigNumber)[]>;
}
export {};
