/**
 * 核心接口定义
 * 统一的SSE事件最小接口，供writer.ts等共享模块使用
 */
export interface JsonObject {
    [key: string]: JsonValue;
}
export type JsonValue = string | number | boolean | null | JsonObject | JsonValue[];
export interface BaseSseEvent {
    /** 事件类型 */
    type: string;
    /** 事件时间戳 */
    timestamp: number;
    /** 事件数据 */
    data: unknown;
    /** 序列号（可选） */
    sequenceNumber?: number;
    /** 协议标识 */
    protocol?: StreamProtocol;
    /** 方向标识 */
    direction?: StreamDirection;
}
export type StreamProtocol = 'chat' | 'responses' | 'anthropic-messages' | 'gemini-chat';
export type StreamDirection = 'json_to_sse' | 'sse_to_json';
export type SseProtocol = StreamProtocol;
export type SseDirection = StreamDirection;
export interface BaseSseEventStream extends AsyncIterable<BaseSseEvent> {
    /** 获取当前统计信息 */
    getStats(): BaseSseEventStats;
    /** 完成流 */
    complete(): void;
    /** 中止流 */
    abort(error?: Error): void;
    /** 错误事件监听 */
    on(event: 'error', handler: (error: Error) => void): this;
    /** 完成事件监听 */
    on(event: 'complete', handler: () => void): this;
    /** 超时事件监听 */
    on(event: 'timeout', handler: () => void): this;
}
export interface BaseSseEventStats {
    /** 总事件数 */
    totalEvents: number;
    /** 事件类型统计 */
    eventTypes: Record<string, number>;
    /** 开始时间 */
    startTime: number;
    /** 结束时间（可选） */
    endTime?: number;
    /** 持续时间（可选） */
    duration?: number;
    /** 错误计数 */
    errorCount?: number;
    /** 最后事件时间（可选） */
    lastEventTime?: number;
}
export interface BaseConversionContext {
    /** 请求ID */
    requestId: string;
    /** 模型名称 */
    model: string;
    /** 转换选项 */
    options: JsonObject;
    /** 开始时间 */
    startTime: number;
}
export interface BaseConversionOptions {
    /** 请求ID */
    requestId: string;
    /** 模型名称 */
    model: string;
    /** 超时毫秒数（可选） */
    timeoutMs?: number;
}
export interface BaseStreamState {
    /** 是否活跃 */
    isActive: boolean;
    /** 当前序列号 */
    currentSequence: number;
    /** 缓冲区大小 */
    bufferSize: number;
    /** 错误状态 */
    hasError: boolean;
}
export type ProtocolSseEvent<T extends BaseSseEvent, P extends SseProtocol> = T & {
    protocol: P;
};
export type DirectionalSseEvent<T extends BaseSseEvent, D extends SseDirection> = T & {
    direction: D;
};
export type CompleteSseEvent<T extends BaseSseEvent, P extends SseProtocol, D extends SseDirection> = T & {
    protocol: P;
    direction: D;
};
