import { AccountsInstrument, EncryptedAccountNumber, AccountNumberString } from "./accounts.types";
import { APIRuleAction, ErrorMessageAndErrors, NoParametersResponse } from "./api.types";
import { AssetType } from "./asset.types";
import { CommissionAndFee } from "./fee.types";
import { DestinationEnum, DurationEnum, SessionEnum } from "./market.types";
export interface GetOrdersForAccountRequest extends BaseGetOrdersRequest {
    accountNumber: EncryptedAccountNumber;
}
export type GetOrdersForAccountResponse = Order[];
export interface PostOrderForAccountRequest {
    accountNumber: EncryptedAccountNumber;
    order: OrderRequest;
}
export type PostOrderForAccountResponse = Order;
export interface GetOrderForAccountByOrderIdRequest {
    accountNumber: EncryptedAccountNumber;
    orderId: number;
}
export type GetOrderForAccountByOrderIdResponse = Order;
export interface DeleteOrderForAccountByOrderIdRequest {
    accountNumber: EncryptedAccountNumber;
    orderId: number;
}
export type DeleteOrderForAccountByOrderIdResponse = NoParametersResponse | ErrorMessageAndErrors;
export interface ReplaceOrderForAccountByOrderIdRequest {
    accountNumber: EncryptedAccountNumber;
    orderId: number;
    order: OrderRequest;
}
export type ReplaceOrderForAccountByOrderIdResponse = NoParametersResponse | ErrorMessageAndErrors;
export interface GetOrdersForAllAccountsRequest extends BaseGetOrdersRequest {
}
export type GetOrdersForAllAccountsResponse = Order[];
export type PreviewOrderForAccountRequest = PostOrderForAccountRequest;
export type PreviewOrderForAccountResponse = PreviewOrder;
export interface BaseGetOrdersRequest {
    maxResults?: number;
    fromEnteredTime: Date;
    toEnteredTime: Date;
    status?: OrderStatusEnum;
}
export declare enum OrderStatusEnum {
    AWAITING_PARENT_ORDER = "AWAITING_PARENT_ORDER",
    AWAITING_CONDITION = "AWAITING_CONDITION",
    AWAITING_STOP_CONDITION = "AWAITING_STOP_CONDITION",
    AWAITING_MANUAL_REVIEW = "AWAITING_MANUAL_REVIEW",
    ACCEPTED = "ACCEPTED",
    AWAITING_UR_OUT = "AWAITING_UR_OUT",
    PENDING_ACTIVATION = "PENDING_ACTIVATION",
    QUEUED = "QUEUED",
    WORKING = "WORKING",
    REJECTED = "REJECTED",
    PENDING_CANCEL = "PENDING_CANCEL",
    CANCELED = "CANCELED",
    PENDING_REPLACE = "PENDING_REPLACE",
    REPLACED = "REPLACED",
    FILLED = "FILLED",
    EXPIRED = "EXPIRED",
    NEW = "NEW",
    AWAITING_RELEASE_TIME = "AWAITING_RELEASE_TIME",
    PENDING_ACKNOWLEDGEMENT = "PENDING_ACKNOWLEDGEMENT",
    PENDING_RECALL = "PENDING_RECALL",
    UNKNOWN = "UNKNOWN"
}
/**
 * Represents an order response from the API.
 * Use OrderRequest for placing/replacing orders.
 */
export interface Order {
    session: SessionEnum;
    duration: DurationEnum;
    orderType: OrderTypeEnum;
    cancelTime?: string;
    complexOrderStrategyType: ComplexOrderStrategyTypeEnum;
    quantity: number;
    filledQuantity: number;
    remainingQuantity: number;
    requestedDestination: DestinationEnum;
    destinationLinkName: string;
    releaseTime?: string;
    stopPrice?: number;
    stopPriceLinkBasis: StopPriceLinkBasisEnum;
    stopPriceLinkType: StopPriceLinkTypeEnum;
    stopPriceOffset?: number;
    stopType: StopTypeEnum;
    priceLinkBasis: PriceLinkBasisEnum;
    priceLinkType: PriceLinkTypeEnum;
    price?: number;
    taxLotMethod: TaxLotMethodEnum;
    orderLegCollection: OrderLegCollection[];
    activationPrice?: number;
    specialInstruction: SpecialInstructionEnum;
    orderStrategyType: OrderStrategyTypeEnum;
    orderId: number;
    cancelable: boolean;
    editable: boolean;
    status: OrderStatusEnum;
    enteredTime: string;
    closeTime?: string;
    tag?: string;
    accountNumber: AccountNumberString;
    orderActivityCollection: OrderActivity[];
    replacingOrderCollection: Order[];
    childOrderStrategies: ChildOrderStrategy[];
    statusDescription: string;
}
/**
 * Represents the structure for placing or replacing an order.
 */
export interface OrderRequest {
    session: SessionEnum;
    duration: DurationEnum;
    orderType: OrderTypeEnum;
    cancelTime?: string;
    complexOrderStrategyType: ComplexOrderStrategyTypeEnum;
    quantity: number;
    requestedDestination: DestinationEnum;
    destinationLinkName: string;
    releaseTime?: string;
    stopPrice?: number;
    stopPriceLinkBasis: StopPriceLinkBasisEnum;
    stopPriceLinkType: StopPriceLinkTypeEnum;
    stopPriceOffset?: number;
    stopType: StopTypeEnum;
    priceLinkBasis: PriceLinkBasisEnum;
    priceLinkType: PriceLinkTypeEnum;
    price?: number;
    taxLotMethod: TaxLotMethodEnum;
    orderLegCollection: OrderLegCollection[];
    activationPrice?: number;
    specialInstruction: SpecialInstructionEnum;
    orderStrategyType: OrderStrategyTypeEnum;
    tag?: string;
}
export interface ChildOrderStrategy {
    orderStrategyType: OrderStrategyTypeEnum;
    orders: Order[];
}
export interface OrderLegCollection {
    orderLegType: AssetType;
    legId: number;
    instrument: AccountsInstrument;
    instruction: InstructionEnum;
    positionEffect: PositionEffectEnum;
    quantity: number;
    quantityType: QuantityTypeEnum;
    divCapGains?: DivCapGainsEnum;
    toSymbol?: string;
}
export interface OrderActivity {
    activityType: OrderActivityTypeEnum;
    executionType: 'FILL';
    quantity: number;
    orderRemainingQuantity: number;
    executionLegs: ExecutionLeg[];
}
export interface PreviewOrder {
    orderId: number;
    orderStrategy: OrderStrategy;
    orderValidationResult: OrderValidationResult;
    commissionAndFee: CommissionAndFee;
}
export interface OrderValidationResult {
    alerts: OrderValidationDetail[];
    accepts: OrderValidationDetail[];
    rejects: OrderValidationDetail[];
    reviews: OrderValidationDetail[];
    warns: OrderValidationDetail[];
}
export interface OrderValidationDetail {
    validationRuleName: string;
    message: string;
    activityMessage: string;
    originalSeverity: APIRuleAction;
    overrideName: string;
    overrideSeverity: APIRuleAction;
}
export interface OrderStrategy {
    accountNumber: AccountNumberString;
    advancedOrderType: AdvancedOrderTypeEnum;
    closeTime?: string;
    enteredTime: string;
    orderBalance: OrderBalance;
    orderStrategyType: OrderStrategyTypeEnum;
    orderVersion: number;
    session: SessionEnum;
    status: OrderStatusEnum;
    allOrNone: boolean;
    discretionary: boolean;
    duration: DurationEnum;
    filledQuantity: number;
    orderType: OrderTypeEnum;
    orderValue: number;
    price?: number;
    quantity: number;
    remainingQuantity: number;
    sellNonMarginableFirst: boolean;
    settlementInstruction: SettlementInstructionEnum;
    strategy: ComplexOrderStrategyTypeEnum;
    amountIndicator: AmountIndicatorEnum;
    orderLegs: OrderLegCollection[];
}
export interface OrderBalance {
    orderValue: number;
    projectedAvailableFund: number;
    projectedBuyingPower: number;
    projectedCommission: number;
}
export interface ExecutionLeg {
    legId: number;
    price: number;
    quantity: number;
    mismarkedQuantity: number;
    instrumentId: number;
    time: string;
}
export declare enum SettlementInstructionEnum {
    REGULAR = "REGULAR",
    CASH = "CASH",
    NEXT_DAY = "NEXT_DAY",
    UNKNOWN = "UNKNOWN"
}
export declare enum AmountIndicatorEnum {
    DOLLARS = "DOLLARS",
    SHARES = "SHARES",
    ALL_SHARES = "ALL_SHARES",
    PERCENTAGE = "PERCENTAGE",
    UNKNOWN = "UNKNOWN"
}
export declare enum PositionEffectEnum {
    OPEN = "OPEN",
    CLOSE = "CLOSE",
    ROLL = "ROLL",
    OFFSET = "OFFSET",
    UNKNOWN = "UNKNOWN"
}
export declare enum OrderTypeEnum {
    MARKET = "MARKET",
    LIMIT = "LIMIT",
    STOP = "STOP",
    STOP_LIMIT = "STOP_LIMIT",
    TRAILING_STOP = "TRAILING_STOP",
    CABINET = "CABINET",
    NON_MARKETABLE = "NON_MARKETABLE",
    MARKET_ON_CLOSE = "MARKET_ON_CLOSE",
    EXERCISE = "EXERCISE",
    TRAILING_STOP_LIMIT = "TRAILING_STOP_LIMIT",
    NET_DEBIT = "NET_DEBIT",
    NET_CREDIT = "NET_CREDIT",
    NET_ZERO = "NET_ZERO",
    LIMIT_ON_CLOSE = "LIMIT_ON_CLOSE",
    UNKNOWN = "UNKNOWN"
}
export declare enum ComplexOrderStrategyTypeEnum {
    NONE = "NONE",
    COVERED = "COVERED",
    VERTICAL = "VERTICAL",
    BACK_RATIO = "BACK_RATIO",
    CALENDAR = "CALENDAR",
    DIAGONAL = "DIAGONAL",
    STRADDLE = "STRADDLE",
    STRANGLE = "STRANGLE",
    COLLAR_SYNTHETIC = "COLLAR_SYNTHETIC",
    BUTTERFLY = "BUTTERFLY",
    CONDOR = "CONDOR",
    IRON_CONDOR = "IRON_CONDOR",
    VERTICAL_ROLL = "VERTICAL_ROLL",
    COLLAR_WITH_STOCK = "COLLAR_WITH_STOCK",
    DOUBLE_DIAGONAL = "DOUBLE_DIAGONAL",
    UNBALANCED_BUTTERFLY = "UNBALANCED_BUTTERFLY",
    UNBALANCED_CONDOR = "UNBALANCED_CONDOR",
    UNBALANCED_IRON_CONDOR = "UNBALANCED_IRON_CONDOR",
    UNBALANCED_VERTICAL_ROLL = "UNBALANCED_VERTICAL_ROLL",
    MUTUAL_FUND_SWAP = "MUTUAL_FUND_SWAP",
    CUSTOM = "CUSTOM"
}
export declare enum AdvancedOrderTypeEnum {
    NONE = "NONE",
    OTO = "OTO",// One Triggers Other
    OCO = "OCO",// One Cancels Other
    OTOCO = "OTOCO",// One Triggers OCO
    OT2OCO = "OT2OCO",// One Triggers Two OCO
    OT3OCO = "OT3OCO",// One Triggers Three OCO
    BLAST_ALL = "BLAST_ALL",
    OTA = "OTA",// One Triggers All
    PAIR = "PAIR"
}
export declare enum StopPriceLinkBasisEnum {
    MANUAL = "MANUAL",
    BASE = "BASE",
    TRIGGER = "TRIGGER",
    LAST = "LAST",
    BID = "BID",
    ASK = "ASK",
    ASK_BID = "ASK_BID",
    MARK = "MARK",
    AVERAGE = "AVERAGE"
}
export declare enum StopPriceLinkTypeEnum {
    VALUE = "VALUE",
    PERCENT = "PERCENT",
    TICK = "TICK"
}
export declare enum StopTypeEnum {
    STANDARD = "STANDARD",
    BID = "BID",
    ASK = "ASK",
    LAST = "LAST",
    MARK = "MARK"
}
export declare enum PriceLinkBasisEnum {
    MANUAL = "MANUAL",
    BASE = "BASE",
    TRIGGER = "TRIGGER",
    LAST = "LAST",
    BID = "BID",
    ASK = "ASK",
    ASK_BID = "ASK_BID",
    MARK = "MARK",
    AVERAGE = "AVERAGE"
}
export declare enum PriceLinkTypeEnum {
    VALUE = "VALUE",
    PERCENT = "PERCENT",
    TICK = "TICK"
}
export declare enum TaxLotMethodEnum {
    FIFO = "FIFO",
    LIFO = "LIFO",
    HIGH_COST = "HIGH_COST",
    LOW_COST = "LOW_COST",
    AVERAGE_COST = "AVERAGE_COST",
    SPECIFIC_LOT = "SPECIFIC_LOT",
    LOSS_HARVESTER = "LOSS_HARVESTER"
}
export declare enum SpecialInstructionEnum {
    ALL_OR_NONE = "ALL_OR_NONE",
    DO_NOT_REDUCE = "DO_NOT_REDUCE",
    ALL_OR_NONE_DO_NOT_REDUCE = "ALL_OR_NONE_DO_NOT_REDUCE"
}
export declare enum OrderStrategyTypeEnum {
    SINGLE = "SINGLE",
    CANCEL = "CANCEL",
    RECALL = "RECALL",
    PAIR = "PAIR",
    FLATTEN = "FLATTEN",
    TWO_DAY_SWAP = "TWO_DAY_SWAP",
    BLAST_ALL = "BLAST_ALL",
    OCO = "OCO",
    TRIGGER = "TRIGGER"
}
export declare enum InstructionEnum {
    BUY = "BUY",
    SELL = "SELL",
    BUY_TO_COVER = "BUY_TO_COVER",
    SELL_SHORT = "SELL_SHORT",
    BUY_TO_OPEN = "BUY_TO_OPEN",
    BUY_TO_CLOSE = "BUY_TO_CLOSE",
    SELL_TO_OPEN = "SELL_TO_OPEN",
    SELL_TO_CLOSE = "SELL_TO_CLOSE",
    EXCHANGE = "EXCHANGE",
    SELL_SHORT_EXEMPT = "SELL_SHORT_EXEMPT"
}
export declare enum QuantityTypeEnum {
    ALL_SHARES = "ALL_SHARES",
    DOLLARS = "DOLLARS",
    SHARES = "SHARES"
}
export declare enum DivCapGainsEnum {
    REINVEST = "REINVEST",
    PAYOUT = "PAYOUT"
}
export declare enum OrderActivityTypeEnum {
    EXECUTION = "EXECUTION",
    ORDER_ACTION = "ORDER_ACTION"
}
//# sourceMappingURL=orders.types.d.ts.map