import { Algodv2, Indexer, Transaction, LogicSigAccount } from "algosdk";
import AlgofiUser from "../../algofiUser";
import ParsedTransaction, { TxnLoadMode } from "../../parsedTransaction";
import AssetDataClient from "../../assetData/assetDataClient";
import { PoolType } from "./ammConfig";
import PoolConfig from "./poolConfig";
import AMMClient from "./ammClient";
export declare enum PoolQuoteType {
    EMPTY_POOL = 0,
    POOL = 1,
    BURN = 2,
    SWAP_EXACT_FOR = 3,
    SWAP_FOR_EXACT = 4,
    ZAP = 5
}
export declare class PoolQuote {
    quoteType: PoolQuoteType;
    asset1Delta: number;
    asset2Delta: number;
    lpDelta: number;
    iterations: number;
    zapAsset1Swap: number;
    zapAsset2Swap: number;
    zapBonus: number;
    constructor(quoteType: PoolQuoteType, asset1Delta: number, asset2Delta: number, lpDelta: number, iterations: number, zapAsset1Swap?: number, zapAsset2Swap?: number, zapBonus?: number);
}
export default class Pool {
    algod: Algodv2;
    indexer: Indexer;
    ammClient: AMMClient;
    assetDataClient: AssetDataClient;
    appId: number;
    asset1Id: number;
    asset2Id: number;
    poolType: PoolType;
    logicSig: LogicSigAccount;
    address: string;
    managerAppId: number;
    lpAssetId: number;
    balance1: number;
    balance2: number;
    lpCirculation: number;
    tvl: number;
    apr: number;
    initialAmplificationFactor: number;
    futureAmplificationFactor: number;
    initialAmplificationFactorTime: number;
    futureAmplificationFactorTime: number;
    ramp_amplification_factor: number;
    targetRatioAdjustmentStartTime: number;
    targetRatioAdjustmentEndTime: number;
    initialTargetAsset1ToAsset2Ratio: number;
    currentTargetAsset1ToAsset2Ratio: number;
    goalTargetAsset1ToAsset2Ratio: number;
    swapFee: number;
    transactions: ParsedTransaction[];
    constructor(algod: Algodv2, ammClient: AMMClient, poolConfig: PoolConfig, tvl?: number, apr?: number);
    loadState(): Promise<void>;
    getTVL(): number;
    getAPR(): number;
    isCreated(): boolean;
    getAmplificationFactor(): number;
    getTargetRatio(): number;
    isNanoPool(): boolean;
    scaleAsset1(input: number): number;
    unscaleAsset1(input: number): number;
    binarySearch(lower: any, upper: any, objective: any): any;
    getEmptyPoolQuote(asset1PooledAmount: number, asset2PooledAmount: number): PoolQuote;
    getPoolQuote(assetId: number, assetAmount: number): PoolQuote;
    getBurnQuote(lpAmount: number): PoolQuote;
    getSwapExactForQuote(swapInAssetId: number, swapInAmount: number): PoolQuote;
    getSwapForExactQuote(swapOutAssetId: number, swapOutAmount: number): PoolQuote;
    getZapQuote(assetAID: number, assetAAmount: number, assetBAmount?: number): PoolQuote;
    getCreatePoolTxns(user: AlgofiUser): Promise<Transaction[]>;
    getInitializePoolTxns(user: AlgofiUser, poolAppId: number): Promise<Transaction[]>;
    getPoolTxns(user: AlgofiUser, quote: PoolQuote, maximumSlippage: number, addToUserCollateral?: boolean): Promise<Transaction[]>;
    getBurnTxns(user: AlgofiUser, quote: PoolQuote): Promise<Transaction[]>;
    getSwapTxns(user: AlgofiUser, quote: PoolQuote, maxSlippage?: number): Promise<Transaction[]>;
    getZapTxns(user: AlgofiUser, quote: PoolQuote, maxSlippage?: number, addToUserCollateral?: boolean): Promise<Transaction[]>;
    getTransactionHistory(mode: TxnLoadMode): Promise<void>;
}
