import { ErrorMessageAndErrors } from "./api.types";
import { AssetType, PutCallEnum } from "./asset.types";
import { CashInitialBalance, MarginBalance, MarginInitialBalance, CashBalance } from "./balances.types";
import { Position } from "./positions.types";
export interface GetAccountNumbersRequest {
}
export type GetAccountNumbersResponse = AccountNumberHash[] | ErrorMessageAndErrors;
export interface GetAccountsRequest {
    fields?: string[];
}
export type GetAccountsResponse = Account[] | ErrorMessageAndErrors;
export interface GetSingleAccountRequest {
    accountNumber: AccountNumberString;
    fields?: string[];
}
export type GetSingleAccountResponse = Account | ErrorMessageAndErrors;
export type AccountNumberString = string;
export type EncryptedAccountNumber = string;
export declare enum AccountType {
    CASH = "CASH",
    MARGIN = "MARGIN"
}
export interface SecuritiesAccountBase {
    type: AccountType;
    accountNumber: AccountNumberString;
    roundTrips: number;
    isDayTrader: boolean;
    isClosingOnlyRestricted: boolean;
    pfcbFlag: boolean;
    positions: Position[];
}
export interface AccountNumberHash {
    accountNumber: AccountNumberString;
    hashValue: string;
}
export interface MarginAccount extends SecuritiesAccountBase {
    type: AccountType.MARGIN;
    initialBalances: MarginInitialBalance;
    currentBalances: MarginBalance;
    projectedBalances: MarginBalance;
}
export interface CashAccount extends SecuritiesAccountBase {
    type: AccountType.CASH;
    initialBalances: CashInitialBalance;
    currentBalances: CashBalance;
    projectedBalances: CashBalance;
}
export type SecuritiesAccount = MarginAccount | CashAccount;
export interface Account {
    securitiesAccount: SecuritiesAccount;
}
export interface AccountsBaseInstrument {
    assetType: AssetType;
    cusip: string;
    symbol: string;
    description: string;
    instrumentId: number;
    netChange: number;
}
export declare enum AccountCashEquivalentTypeEnum {
    SWEEP_VEHICLE = "SWEEP_VEHICLE",
    SAVINGS = "SAVINGS",
    MONEY_MARKET_FUND = "MONEY_MARKET_FUND",
    UNKNOWN = "UNKNOWN"
}
export declare enum AccountOptionTypeEnum {
    VANILLA = "VANILLA",
    BINARY = "BINARY",
    BARRIER = "BARRIER",
    UNKNOWN = "UNKNOWN"
}
export declare enum UserDetailsTypeEnum {
    ADVISOR_USER = "ADVISOR_USER",
    BROKER_USER = "BROKER_USER",
    CLIENT_USER = "CLIENT_USER",
    SYSTEM_USER = "SYSTEM_USER",
    UNKNOWN = "UNKNOWN"
}
export interface AccountCashEquivalent extends AccountsBaseInstrument {
    type: AccountCashEquivalentTypeEnum;
}
export interface AccountEquity extends AccountsBaseInstrument {
}
export interface AccountFixedIncome extends AccountsBaseInstrument {
    maturityDate: string;
    factor: number;
    variableRate: number;
}
export interface AccountMutualFund extends AccountsBaseInstrument {
}
export interface AccountAPIOptionDeliverable {
    symbol: string;
    deliverableUnits: number;
    apiCurrencyType: "USD" | "CAD" | "EUR" | "JPY";
    assetType: AssetType;
}
export interface AccountOption extends AccountsBaseInstrument {
    optionDeliverables: AccountAPIOptionDeliverable[];
    putCall: PutCallEnum;
    optionMultiplier: number;
    type: AccountOptionTypeEnum;
    underlyingSymbol: string;
}
export type AccountsInstrument = AccountCashEquivalent | AccountEquity | AccountFixedIncome | AccountMutualFund | AccountOption;
export interface UserDetails {
    cdDomainId: string;
    login: string;
    type: UserDetailsTypeEnum;
    userId: number;
    systemUserName: string;
    firstName: string;
    lastName: string;
    brokerRepCode: string;
}
//# sourceMappingURL=accounts.types.d.ts.map