/// <reference types="bn.js" />
import { BN } from '../isomorphic/anchor';
import { MMOraclePriceData, OraclePriceData } from '../oracles/types';
import { PerpMarketAccount, PositionDirection, PerpPosition, SpotMarketAccount } from '../types';
/**
 * calculateBaseAssetValue
 * = market value of closing entire position
 * @param market
 * @param userPosition
 * @param oraclePriceData
 * @returns Base Asset Value. : Precision QUOTE_PRECISION
 */
export declare function calculateBaseAssetValue(market: PerpMarketAccount, userPosition: PerpPosition, mmOraclePriceData: MMOraclePriceData, useSpread?: boolean, skipUpdate?: boolean, latestSlot?: BN): BN;
/**
 * calculatePositionPNL
 * = BaseAssetAmount * (Avg Exit Price - Avg Entry Price)
 * @param market
 * @param PerpPosition
 * @param withFunding (adds unrealized funding payment pnl to result)
 * @param oraclePriceData
 * @returns BaseAssetAmount : Precision QUOTE_PRECISION
 */
export declare function calculatePositionPNL(market: PerpMarketAccount, perpPosition: PerpPosition, withFunding: boolean, oraclePriceData: Pick<OraclePriceData, 'price'>): BN;
export declare function calculateClaimablePnl(market: PerpMarketAccount, spotMarket: SpotMarketAccount, perpPosition: PerpPosition, oraclePriceData: Pick<OraclePriceData, 'price'>): BN;
/**
 * Returns total fees and funding pnl for a position
 *
 * @param market
 * @param PerpPosition
 * @param includeUnsettled include unsettled funding in return value (default: true)
 * @returns — // QUOTE_PRECISION
 */
export declare function calculateFeesAndFundingPnl(market: PerpMarketAccount, perpPosition: PerpPosition, includeUnsettled?: boolean): BN;
/**
 * Returns unsettled funding pnl for the position
 *
 * To calculate all fees and funding pnl including settled, use calculateFeesAndFundingPnl
 *
 * @param market
 * @param PerpPosition
 * @returns // QUOTE_PRECISION
 */
export declare function calculateUnsettledFundingPnl(market: PerpMarketAccount, perpPosition: PerpPosition): BN;
/**
 * @deprecated use calculateUnsettledFundingPnl or calculateFeesAndFundingPnl instead
 */
export declare function calculatePositionFundingPNL(market: PerpMarketAccount, perpPosition: PerpPosition): BN;
export declare function positionIsAvailable(position: PerpPosition): boolean;
export declare function positionIsBeingLiquidated(position: PerpPosition): boolean;
/**
 *
 * @param userPosition
 * @returns Precision: PRICE_PRECISION (10^6)
 */
export declare function calculateBreakEvenPrice(userPosition: PerpPosition): BN;
/**
 *
 * @param userPosition
 * @returns Precision: PRICE_PRECISION (10^6)
 */
export declare function calculateEntryPrice(userPosition: PerpPosition): BN;
/**
 *
 * @param userPosition
 * @returns Precision: PRICE_PRECISION (10^10)
 */
export declare function calculateCostBasis(userPosition: PerpPosition, includeSettledPnl?: boolean): BN;
export declare function findDirectionToClose(userPosition: PerpPosition): PositionDirection;
export declare function positionCurrentDirection(userPosition: PerpPosition): PositionDirection;
export declare function isEmptyPosition(userPosition: PerpPosition): boolean;
export declare function hasOpenOrders(position: PerpPosition): boolean;
