import BN from 'bn.js';
import { KaminoReserve } from '../classes/reserve';
/**
 * Base class for reserve kind identification.
 * Since a market can have multiple reserves for the same mint (with different terms),
 * this kind specifies which reserve to select.
 */
export declare abstract class ReserveKind {
    /**
     * Checks if a reserve matches this reserve kind's criteria
     */
    abstract matches(reserve: KaminoReserve): boolean;
    /**
     * Returns a human-readable string representation
     */
    abstract toString(): string;
    /**
     * Type check: returns true if this is an open-term reserve
     */
    abstract isFloatRate(): boolean;
    /**
     * Type check: returns true if this is a fixed-term reserve
     */
    abstract isFixedRate(): boolean;
    /**
     * Type check: returns true if this is a maturity-timestamp reserve
     */
    abstract isMaturityTimestampKind(): boolean;
}
/**
 * Represents an open-term reserve with no fixed maturity.
 */
export declare class FloatRateReserveKind extends ReserveKind {
    /**
     * Checks if a reserve matches this open-term reserve kind
     */
    matches(reserve: KaminoReserve): boolean;
    toString(): string;
    isFloatRate(): boolean;
    isFixedRate(): boolean;
    isMaturityTimestampKind(): boolean;
}
/**
 * Represents a fixed-term reserve with specific loan parameters.
 */
export declare class FixedRateReserveKind extends ReserveKind {
    readonly debtTermSeconds: BN;
    readonly borrowRateBps: number;
    /**
     * @param debtTermSeconds The debt term in seconds (e.g., new BN(30 * 24 * 60 * 60) for 30 days)
     * @param borrowRateBps The maximum borrow rate in basis points (e.g., 500 for 5%)
     */
    constructor(debtTermSeconds: BN, borrowRateBps: number);
    /**
     * Checks if a reserve matches this fixed-term reserve kind
     */
    matches(reserve: KaminoReserve): boolean;
    toString(): string;
    isFloatRate(): boolean;
    isFixedRate(): boolean;
    isMaturityTimestampKind(): boolean;
}
/**
 * Represents a reserve with a fixed maturity timestamp at which all debts become liquidatable.
 */
export declare class MaturityTimestampReserveKind extends ReserveKind {
    readonly debtMaturityTimestamp: BN;
    /**
     * @param debtMaturityTimestamp The unix timestamp at which all debts from this reserve become liquidatable
     */
    constructor(debtMaturityTimestamp: BN);
    /**
     * Checks if a reserve matches this maturity timestamp reserve kind
     */
    matches(reserve: KaminoReserve): boolean;
    toString(): string;
    isFloatRate(): boolean;
    isFixedRate(): boolean;
    isMaturityTimestampKind(): boolean;
}
//# sourceMappingURL=ReserveKind.d.ts.map