import { AccountEvent } from './account.interface';
import { Candle } from './candle.interface';
import { Order } from './order.interface';
import { OrderBook } from './orderbook.interface';
import { AdvisorAutonomousCycleCompletedPayload, AdvisorAutonomousCycleStartedPayload, AdvisorConvictionCalibrationPayload, AdvisorConvictionPayload, AdvisorDecisionPayload, AdvisorDecisionMadePayload, ExecutionIntentPayload, AdvisorFactorExposureSnapshotPayload, AdvisorNetExposureSnapshotPayload, AdvisorOutcomeAttributionSnapshotPayload, AdvisorPerformanceFeedbackProcessedPayload, AdvisorPortfolioAllocationPayload, AdvisorPortfolioCorrelationSnapshotPayload, AdvisorPortfolioRiskModeSnapshotPayload, AdvisorRegimeCapitalRotationSnapshotPayload, AdvisorSignalPayload, BaseEvent, DetectorSignalPayload, InspectorRegimePayload, InspectorRiskPayload, InspectorTradeOutcomePayload, SubscriptionType, SubscriptionValue } from './subscription.interface';
import { Instrument, InstrumentPrice } from './instrument.interface';
import { Trade } from './trade.interface';
export interface ProviderTradeEvent {
    instrument: Instrument;
    price: number;
    volume: number;
    side: Trade['side'];
    time: number;
}
export type ProviderOrderBookEvent = OrderBook;
export type ProviderCandleEvent = Candle;
export type ProviderAccountEvent = AccountEvent;
export type ProviderOrderCreateEvent = Order;
export type ProviderOrderCloseEvent = Order;
export type ProviderInstrumentsEvent = Array<Instrument>;
export type ProviderInstrumentPricesEvent = InstrumentPrice;
export interface InspectorVolatilitySpikePayload {
    instrument: Instrument;
    volatility: number;
    threshold?: number;
    reason?: string;
}
export interface InspectorLiquidityDroppedPayload {
    instrument: Instrument;
    liquidityScore: number;
    threshold?: number;
    reason?: string;
}
export interface InspectorDataGapDetectedPayload {
    instrument: Instrument;
    gapSizeMs: number;
    expectedIntervalMs?: number;
    reason?: string;
}
export interface InspectorDataOutlierDetectedPayload {
    instrument: Instrument;
    metric: string;
    value: number;
    zScore?: number;
    reason?: string;
}
export interface InspectorDataMaturityUpdatePayload {
    instrument: Instrument;
    mature: boolean;
    intentType: SubscriptionType;
}
export interface InspectorRiskMarginUpdatePayload {
    instrument: Instrument;
    currentMargin: number;
    requiredMargin: number;
    reason?: string;
}
export interface AdvisorDecisionRequestPayload {
    requestId: string;
    symbol: string;
    timestamp: number;
    [key: string]: unknown;
}
export interface AdvisorConfidenceLowPayload {
    decisionId?: string;
    symbol: string;
    confidence: number;
    threshold?: number;
    reason?: string;
}
export interface AdvisorModelSwitchedPayload {
    fromModel: string;
    toModel: string;
    reason?: string;
    switchedAt: number;
}
export interface AdvisorHallucinationDetectedPayload {
    decisionId?: string;
    symbol?: string;
    reason: string;
    confidence?: number;
    detectedAt: number;
}
export interface EventPayloadMap {
    [SubscriptionType.PROVIDER_MARKETDATA_TRADE]: ProviderTradeEvent;
    [SubscriptionType.PROVIDER_MARKETDATA_ORDERBOOK]: ProviderOrderBookEvent;
    [SubscriptionType.PROVIDER_MARKETDATA_CANDLE]: ProviderCandleEvent;
    [SubscriptionType.PROVIDER_ACCOUNT_EVENT]: ProviderAccountEvent;
    [SubscriptionType.PROVIDER_ORDER_CREATE]: ProviderOrderCreateEvent;
    [SubscriptionType.PROVIDER_ORDER_CLOSE]: ProviderOrderCloseEvent;
    [SubscriptionType.PROVIDER_INSTRUMENTS]: ProviderInstrumentsEvent;
    [SubscriptionType.PROVIDER_INSTRUMENT_PRICES]: ProviderInstrumentPricesEvent;
    [SubscriptionType.INSPECTOR_TREND_DETECTED]: InspectorRegimePayload;
    [SubscriptionType.INSPECTOR_RANGE_DETECTED]: InspectorRegimePayload;
    [SubscriptionType.INSPECTOR_VOLATILITY_SPIKE]: InspectorVolatilitySpikePayload;
    [SubscriptionType.INSPECTOR_LIQUIDITY_DROPPED]: InspectorLiquidityDroppedPayload;
    [SubscriptionType.INSPECTOR_DATA_GAP_DETECTED]: InspectorDataGapDetectedPayload;
    [SubscriptionType.INSPECTOR_DATA_OUTLIER_DETECTED]: InspectorDataOutlierDetectedPayload;
    [SubscriptionType.INSPECTOR_DATA_MATURITY_UPDATE]: InspectorDataMaturityUpdatePayload;
    [SubscriptionType.INSPECTOR_RISK_LIMIT_BREACH]: InspectorRiskPayload;
    [SubscriptionType.INSPECTOR_RISK_MARGIN_UPDATE]: InspectorRiskMarginUpdatePayload;
    [SubscriptionType.INSPECTOR_RISK_KILL_SWITCH]: InspectorRiskPayload;
    [SubscriptionType.INSPECTOR_TRADE_OUTCOME]: InspectorTradeOutcomePayload;
    [SubscriptionType.DETECTOR_SIGNAL_GENERATED]: DetectorSignalPayload;
    [SubscriptionType.DETECTOR_SIGNAL_UPDATED]: DetectorSignalPayload;
    [SubscriptionType.DETECTOR_SIGNAL_INVALIDATED]: DetectorSignalPayload;
    [SubscriptionType.DETECTOR_POSITION_OPEN_REQUEST]: DetectorSignalPayload;
    [SubscriptionType.DETECTOR_POSITION_CLOSE_REQUEST]: DetectorSignalPayload;
    [SubscriptionType.DETECTOR_POSITION_REDUCE_REQUEST]: DetectorSignalPayload;
    [SubscriptionType.DETECTOR_POSITION_FLIP_REQUEST]: DetectorSignalPayload;
    [SubscriptionType.ADVISOR_DECISION_REQUEST]: AdvisorDecisionRequestPayload;
    [SubscriptionType.ADVISOR_DECISION_RESPONSE]: AdvisorDecisionPayload;
    [SubscriptionType.ADVISOR_DECISION_MADE]: AdvisorDecisionMadePayload;
    [SubscriptionType.ADVISOR_SIGNAL_GENERATED]: AdvisorSignalPayload;
    [SubscriptionType.ADVISOR_EXECUTION_INTENT_OPEN]: ExecutionIntentPayload;
    [SubscriptionType.ADVISOR_EXECUTION_INTENT_CLOSE]: ExecutionIntentPayload;
    [SubscriptionType.ADVISOR_EXECUTION_INTENT_REDUCE]: ExecutionIntentPayload;
    [SubscriptionType.ADVISOR_EXECUTION_INTENT_FLIP]: ExecutionIntentPayload;
    [SubscriptionType.ADVISOR_AUTONOMOUS_CYCLE_STARTED]: AdvisorAutonomousCycleStartedPayload;
    [SubscriptionType.ADVISOR_AUTONOMOUS_CYCLE_COMPLETED]: AdvisorAutonomousCycleCompletedPayload;
    [SubscriptionType.ADVISOR_DECISION_CONTEXT_SNAPSHOT]: AdvisorDecisionPayload;
    [SubscriptionType.ADVISOR_CONVICTION_SNAPSHOT]: AdvisorConvictionPayload;
    [SubscriptionType.ADVISOR_CONVICTION_CALIBRATION_SNAPSHOT]: AdvisorConvictionCalibrationPayload;
    [SubscriptionType.ADVISOR_PORTFOLIO_ALLOCATION_SNAPSHOT]: AdvisorPortfolioAllocationPayload;
    [SubscriptionType.ADVISOR_PORTFOLIO_CORRELATION_SNAPSHOT]: AdvisorPortfolioCorrelationSnapshotPayload;
    [SubscriptionType.ADVISOR_REGIME_CAPITAL_ROTATION_SNAPSHOT]: AdvisorRegimeCapitalRotationSnapshotPayload;
    [SubscriptionType.ADVISOR_NET_EXPOSURE_SNAPSHOT]: AdvisorNetExposureSnapshotPayload;
    [SubscriptionType.ADVISOR_FACTOR_EXPOSURE_SNAPSHOT]: AdvisorFactorExposureSnapshotPayload;
    [SubscriptionType.ADVISOR_PORTFOLIO_RISK_MODE_SNAPSHOT]: AdvisorPortfolioRiskModeSnapshotPayload;
    [SubscriptionType.ADVISOR_PERFORMANCE_FEEDBACK_PROCESSED]: AdvisorPerformanceFeedbackProcessedPayload;
    [SubscriptionType.ADVISOR_OUTCOME_ATTRIBUTION_SNAPSHOT]: AdvisorOutcomeAttributionSnapshotPayload;
    [SubscriptionType.ADVISOR_CONFIDENCE_LOW]: AdvisorConfidenceLowPayload;
    [SubscriptionType.ADVISOR_MODEL_SWITCHED]: AdvisorModelSwitchedPayload;
    [SubscriptionType.ADVISOR_HALLUCINATION_DETECTED]: AdvisorHallucinationDetectedPayload;
}
export type EventPayloadByType<TType extends SubscriptionType> = EventPayloadMap[TType];
export type EventValueByType<TType extends SubscriptionType> = EventPayloadByType<TType> | BaseEvent<TType, EventPayloadByType<TType>>;
export interface EventMetadata {
    eventId: string;
    traceId: string;
    timestamp: number;
    version: number;
    source: string;
}
export type EventMessageByType<TType extends SubscriptionType> = {
    metadata: EventMetadata;
    value: EventValueByType<TType>;
    options: SubscriptionValue['options'];
};
type MissingEventPayloadTypes = Exclude<SubscriptionType, keyof EventPayloadMap>;
type ExtraEventPayloadTypes = Exclude<keyof EventPayloadMap, SubscriptionType>;
export type AssertEventPayloadMapCoverage = [
    MissingEventPayloadTypes,
    ExtraEventPayloadTypes
] extends [never, never] ? true : never;
export declare const ASSERT_EVENT_PAYLOAD_MAP_COVERAGE: AssertEventPayloadMapCoverage;
export {};
//# sourceMappingURL=event-payload.interface.d.ts.map