import * as fs from 'fs';
import { MarketCache, StreamRunnerStatus, StreamMarketStatus, MarketChangeCallback, RawDataCallback } from './betfair-exchange-stream-api-types';
import { BetfairApiState } from './betfair-api';
import { MarketCatalogue } from './betfair-api-types';
export interface MarketRecordingConfig {
    outputDirectory: string;
    enableBasicRecording: boolean;
    enableRawRecording: boolean;
    rawFilePrefix?: string;
    basicFilePrefix?: string;
    recordingMode?: 'finite' | 'perpetual';
    onAllMarketsComplete?: () => void;
    enrichment?: {
        enabled: boolean;
        apiState: BetfairApiState;
        cacheExpiryMinutes?: number;
    };
}
export interface BasicMarketRecord {
    marketId: string;
    marketName: string;
    eventName: string;
    marketStatus: StreamMarketStatus;
    marketTime: string;
    openDate: string;
    totalMatched: number;
    inPlay: boolean;
    bspReconciled: boolean;
    complete: boolean;
    numberOfWinners: number;
    runners: BasicRunnerRecord[];
    recordedAt: string;
    finalTotalMatched?: number;
    winners?: number[];
    reconciled?: boolean;
    reconciliationTime?: string;
    calculatedTotalTurnover?: number;
    liquidityProfile?: {
        totalUniquePrice: number;
        averageSpread?: number;
        marketDepth: number;
    };
}
export interface BasicRunnerRecord {
    id: number;
    name: string;
    status: StreamRunnerStatus;
    adjustmentFactor: number;
    lastPriceTraded: number;
    totalMatched: number;
    bsp?: number;
    ltp: number;
    tv: number;
    spn?: number;
    spf?: number;
    finalStatus?: StreamRunnerStatus;
    isWinner: boolean;
    reconciledVolume?: number;
    totalTurnover?: number;
    volumeWeightedPrice?: number;
    priceRange?: {
        highest: number;
        lowest: number;
        trades: number;
    };
    tradingActivity?: [number, number][];
}
export interface MarketRecorderState {
    config: MarketRecordingConfig;
    rawFileStreams: Map<string, fs.WriteStream>;
    basicRecords: Map<string, BasicMarketRecord>;
    isRecording: boolean;
    subscribedMarkets: Set<string>;
    completedMarkets: Set<string>;
    enrichmentCache: Map<string, {
        catalogue: MarketCatalogue;
        cachedAt: Date;
    }>;
}
/**
 * Creates initial market recorder state
 */
export declare const createMarketRecorderState: (config: MarketRecordingConfig) => MarketRecorderState;
/**
 * Starts recording for specified markets
 */
export declare const startRecording: (state: MarketRecorderState, marketIds: string[]) => MarketRecorderState;
export declare const registerRecorderProcessCleanup: (state: MarketRecorderState) => void;
/**
 * Stops recording and closes all file streams
 */
export declare const stopRecording: (state: MarketRecorderState) => MarketRecorderState;
/**
 * Records raw transmission data to file
 */
export declare const recordRawTransmission: (state: MarketRecorderState, rawData: string) => void;
/**
 * Updates basic market record from market cache
 */
export declare const updateBasicRecord: (state: MarketRecorderState, marketCache: MarketCache) => void;
/**
 * Gets completion status for all markets
 */
export declare const getRecordingCompletionStatus: (state: MarketRecorderState) => {
    totalMarkets: number;
    completedMarkets: number;
    pendingMarkets: string[];
    isAllComplete: boolean;
    recordingMode: "finite" | "perpetual";
};
/**
 * Adds new markets to an existing recording session
 */
export declare const addMarketsToRecording: (state: MarketRecorderState, marketIds: string[]) => MarketRecorderState;
/**
 * Creates a raw data callback for recording raw transmissions
 */
export declare const createRawDataCallback: (state: MarketRecorderState) => RawDataCallback;
/**
 * Creates a market change callback that handles basic recording
 */
export declare const createRecordingMarketChangeCallback: (state: MarketRecorderState, originalCallback?: MarketChangeCallback) => MarketChangeCallback;
/**
 * Gets recording status for a market
 */
export declare const getRecordingStatus: (state: MarketRecorderState, marketId: string) => {
    isRecording: boolean;
    hasRawStream: boolean;
    hasBasicRecord: boolean;
    rawFilePath?: string;
    basicFilePath?: string;
};
/**
 * Loads a basic market record from file
 */
export declare const loadBasicRecord: (config: MarketRecordingConfig, marketId: string) => BasicMarketRecord | null;
/**
 * Lists all recorded markets in the output directory
 */
export declare const listRecordedMarkets: (config: MarketRecordingConfig) => {
    basicRecords: string[];
    rawRecords: string[];
};
export declare const shutdownRecorder: (state: MarketRecorderState) => MarketRecorderState;
//# sourceMappingURL=market-recorder.d.ts.map