import { IChain, ISwap } from '../utils';
import { BigNumber } from 'ethers';
export type HarvestArgs = [string[], BigNumber | number, number];
export declare enum StrategyType {
    IMX = "IMX",
    HLP = "HLP",
    LLP = "LLP",
    LND = "LND",
    IMXL = "IMXL",
    LCVX = "LCVX"
}
export interface IMocks {
    oracleAdmin: string;
    oracle?: string;
    chainlinkFeed: string;
    chainlinkDec: number;
}
export interface CommonStrat {
    name: string;
    symbol: string;
    underlying: string;
    chain: IChain;
    managementFee: BigNumber;
    performanceFee: BigNumber;
    type?: StrategyType;
    args?: any;
    shouldUpdate?: boolean;
    skip: boolean;
    maxTvl: number;
    lendRewardPath?: string | string[];
    harvestPath?: string | string[];
    harvestPaths?: string[];
}
export interface IHLPStrat extends CommonStrat {
    contract: string;
    swap: ISwap;
    short: string;
    mocks: IMocks;
    lending: string;
    cTokenLend?: string;
    cTokenBorrow?: string;
    farmId?: number;
    farmSwaps: ISwap[];
    farmPaths: string[][];
    uniFarm: string;
    uniPair: string;
    farmToken: string;
    comptroller: string;
    lendRewardToken: string;
    lendSwaps: ISwap[];
    lendRewardPaths: string[][];
    minLendHarvest: BigNumber;
    minTvl: BigNumber;
    nativeToken?: number;
    underlyingDec: number;
}
export interface IMXStrat extends CommonStrat {
    swap: ISwap;
    short: string;
    farmSwaps: ISwap[];
    farmPaths: string[][];
    uniPair: string;
    poolToken: string;
    farmToken: string;
    minTvl: BigNumber;
    acceptsNativeToken: boolean;
    farmRouter: string;
    underlyingDec: number;
    shortDec: number;
}
export interface ILevConvexStrat extends CommonStrat {
    curveAdapter: string;
    curveAdapterDeposit: string;
    acceptsNativeToken: boolean;
    convexRewardPool: string;
    creditFacade: string;
    convexBooster: string;
    coinId: number;
    leverageFactor: number;
    farmRouter: string;
    farmTokens: string[];
    is3crv: true;
    riskId: number;
    riskAssetDecimals: number;
}
export interface IMXLending extends CommonStrat {
    address: string;
    acceptsNativeToken: boolean;
}
export interface ILendingStrat extends CommonStrat {
    acceptsNativeToken: boolean;
    contract: string;
    yieldToken: string;
    strategy: string;
    strategyId: number;
    farm?: string;
    farmId?: number;
    farmRouter?: string;
    farmToken?: string;
}
export type IStrat = IMXStrat | IHLPStrat | ILendingStrat;
