import { PublicKey } from '@solana/web3.js';
import { l as ApiV3PoolInfoStandardItem, r as AmmV4Keys, s as AmmV5Keys, a7 as BigNumberish } from '../../type-853b65da.js';
import { TxVersion } from '../../common/txTool/txType.js';
import BN__default from 'bn.js';
import Decimal from 'decimal.js-light';
import 'decimal.js';
import '../../module/token.js';
import '../../common/pubKey.js';
import '../../common/logger.js';
import '../../module/currency.js';
import '../../marshmallow/index.js';
import '../../marshmallow/buffer-layout.js';
import '@solana/spl-token';
import '../../common/owner.js';
import '../../common/txTool/lookupTable.js';

declare type LiquiditySide = "a" | "b";
declare type AmountSide = "base" | "quote";
interface AddLiquidityParams<T = TxVersion.LEGACY> {
    poolInfo: ApiV3PoolInfoStandardItem;
    payer?: PublicKey;
    amountInA: string | Decimal | BN__default;
    amountInB: string | Decimal | BN__default;
    fixedSide: LiquiditySide;
    config?: {
        bypassAssociatedCheck?: boolean;
        checkCreateATAOwner?: boolean;
    };
    txVersion?: T;
}
interface RemoveParams<T = TxVersion.LEGACY> {
    poolInfo: ApiV3PoolInfoStandardItem;
    payer?: PublicKey;
    amountIn: BN__default;
    config?: {
        bypassAssociatedCheck?: boolean;
        checkCreateATAOwner?: boolean;
    };
    txVersion?: T;
}
interface LiquidityUserKeys {
    baseTokenAccount: PublicKey;
    quoteTokenAccount: PublicKey;
    lpTokenAccount: PublicKey;
    owner: PublicKey;
}
interface LiquidityAddInstructionParams {
    poolInfo: ApiV3PoolInfoStandardItem;
    poolKeys: AmmV4Keys | AmmV5Keys;
    userKeys: LiquidityUserKeys;
    baseAmountIn: BigNumberish;
    quoteAmountIn: BigNumberish;
    fixedSide: AmountSide;
}
interface RemoveLiquidityInstruction {
    poolInfo: ApiV3PoolInfoStandardItem;
    poolKeys: AmmV4Keys | AmmV5Keys;
    userKeys: LiquidityUserKeys;
    amountIn: BigNumberish;
}
interface LiquidityPoolKeys {
    id: PublicKey;
    baseMint: PublicKey;
    quoteMint: PublicKey;
    lpMint: PublicKey;
    baseDecimals: number;
    quoteDecimals: number;
    lpDecimals: number;
    version: 4 | 5;
    programId: PublicKey;
    authority: PublicKey;
    nonce: number;
    baseVault: PublicKey;
    quoteVault: PublicKey;
    lpVault: PublicKey;
    openOrders: PublicKey;
    targetOrders: PublicKey;
    withdrawQueue: PublicKey;
    marketVersion: 3;
    marketProgramId: PublicKey;
    marketId: PublicKey;
    marketAuthority: PublicKey;
    lookupTableAccount: PublicKey;
}
interface CreatePoolParam<T> {
    programId: PublicKey;
    marketInfo: {
        marketId: PublicKey;
        programId: PublicKey;
    };
    baseMintInfo: {
        mint: PublicKey;
        decimals: number;
    };
    quoteMintInfo: {
        mint: PublicKey;
        decimals: number;
    };
    baseAmount: BN__default;
    quoteAmount: BN__default;
    startTime: BN__default;
    ownerInfo: {
        feePayer?: PublicKey;
        useSOLBalance?: boolean;
    };
    associatedOnly: boolean;
    checkCreateATAOwner?: boolean;
    tokenProgram?: PublicKey;
    txVersion?: T;
}
interface CreatePoolAddress {
    programId: PublicKey;
    ammId: PublicKey;
    ammAuthority: PublicKey;
    ammOpenOrders: PublicKey;
    lpMint: PublicKey;
    coinMint: PublicKey;
    pcMint: PublicKey;
    coinVault: PublicKey;
    pcVault: PublicKey;
    withdrawQueue: PublicKey;
    ammTargetOrders: PublicKey;
    poolTempLp: PublicKey;
    marketProgramId: PublicKey;
    marketId: PublicKey;
}
interface SwapFixedInInstructionParamsV4 {
    poolKeys: AmmV4Keys | AmmV5Keys;
    userKeys: {
        tokenAccountIn: PublicKey;
        tokenAccountOut: PublicKey;
        owner: PublicKey;
    };
    amountIn: BigNumberish;
    minAmountOut: BigNumberish;
}
interface SwapFixedOutInstructionParamsV4 {
    poolKeys: AmmV4Keys | AmmV5Keys;
    userKeys: {
        tokenAccountIn: PublicKey;
        tokenAccountOut: PublicKey;
        owner: PublicKey;
    };
    maxAmountIn: BigNumberish;
    amountOut: BigNumberish;
}
declare type SwapSide = "in" | "out";
interface SwapInstructionParams {
    version: number;
    poolKeys: AmmV4Keys | AmmV5Keys;
    userKeys: {
        tokenAccountIn: PublicKey;
        tokenAccountOut: PublicKey;
        owner: PublicKey;
    };
    amountIn: BigNumberish;
    amountOut: BigNumberish;
    fixedSide: SwapSide;
}
interface InitPoolInstructionParamsV4 {
    poolKeys: AmmV4Keys | AmmV5Keys;
    userKeys: {
        lpTokenAccount: PublicKey;
        payer: PublicKey;
    };
    startTime: BigNumberish;
}

export { AddLiquidityParams, AmountSide, CreatePoolAddress, CreatePoolParam, InitPoolInstructionParamsV4, LiquidityAddInstructionParams, LiquidityPoolKeys, LiquiditySide, LiquidityUserKeys, RemoveLiquidityInstruction, RemoveParams, SwapFixedInInstructionParamsV4, SwapFixedOutInstructionParamsV4, SwapInstructionParams, SwapSide };
