/// <reference types="bn.js" />
import { BN } from './isomorphic/anchor';
import { MarketType } from './types';
export type MarginCategory = 'Initial' | 'Maintenance' | 'Fill';
export type MarginCalculationMode = {
    type: 'Standard';
} | {
    type: 'Liquidation';
};
export declare class MarketIdentifier {
    marketType: MarketType;
    marketIndex: number;
    private constructor();
    static spot(marketIndex: number): MarketIdentifier;
    static perp(marketIndex: number): MarketIdentifier;
    equals(other: MarketIdentifier | undefined): boolean;
}
export declare class MarginContext {
    marginType: MarginCategory;
    mode: MarginCalculationMode;
    strict: boolean;
    ignoreInvalidDepositOracles: boolean;
    isolatedMarginBuffers: Map<number, BN>;
    crossMarginBuffer: BN;
    private constructor();
    static standard(marginType: MarginCategory): MarginContext;
    static liquidation(crossMarginBuffer: BN, isolatedMarginBuffers: Map<number, BN>): MarginContext;
    strictMode(strict: boolean): this;
    ignoreInvalidDeposits(ignore: boolean): this;
    setCrossMarginBuffer(crossMarginBuffer: BN): this;
    setIsolatedMarginBuffers(isolatedMarginBuffers: Map<number, BN>): this;
    setIsolatedMarginBuffer(marketIndex: number, isolatedMarginBuffer: BN): this;
}
export declare class IsolatedMarginCalculation {
    marginRequirement: BN;
    totalCollateral: BN;
    totalCollateralBuffer: BN;
    marginRequirementPlusBuffer: BN;
    constructor();
    getTotalCollateralPlusBuffer(): BN;
    meetsMarginRequirement(): boolean;
    meetsMarginRequirementWithBuffer(): boolean;
    marginShortage(): BN;
}
export declare class MarginCalculation {
    context: MarginContext;
    totalCollateral: BN;
    totalCollateralBuffer: BN;
    marginRequirement: BN;
    marginRequirementPlusBuffer: BN;
    isolatedMarginCalculations: Map<number, IsolatedMarginCalculation>;
    totalPerpLiabilityValue: BN;
    constructor(context: MarginContext);
    addCrossMarginTotalCollateral(delta: BN): void;
    addCrossMarginRequirement(marginRequirement: BN, liabilityValue: BN): void;
    addIsolatedMarginCalculation(marketIndex: number, depositValue: BN, pnl: BN, liabilityValue: BN, marginRequirement: BN): void;
    addPerpLiabilityValue(perpLiabilityValue: BN): void;
    getCrossTotalCollateralPlusBuffer(): BN;
    meetsCrossMarginRequirement(): boolean;
    meetsCrossMarginRequirementWithBuffer(): boolean;
    meetsMarginRequirement(): boolean;
    meetsMarginRequirementWithBuffer(): boolean;
    getCrossFreeCollateral(): BN;
    getIsolatedFreeCollateral(marketIndex: number): BN;
    getIsolatedMarginCalculation(marketIndex: number): IsolatedMarginCalculation | undefined;
    hasIsolatedMarginCalculation(marketIndex: number): boolean;
}
//# sourceMappingURL=marginCalculation.d.ts.map