import { SessionState, SessionResult, DetailedReport, CombinedReport, MultiSessionConfig } from './types';
import { RunnerEventType, SessionEventType, RunnerEvent, SessionEvent } from '../events/index';
import { BatchExecutionOptions } from './batch-execution';

export interface IMultiSessionDetailedRunner {
  // Core Management
  init(config?: Partial<MultiSessionConfig>): void;
  define(label: string, setupFn: () => void): void;
  run(label: string): Promise<SessionResult>;
  runAll(options?: BatchExecutionOptions): Promise<Record<string, SessionResult>>;
  
  // Report Access
  getReport(label: string): DetailedReport | null;
  getSessionStates(): Record<string, SessionState>;
  getCombinedReport(): CombinedReport;
  
  // Event System
  onRunnerEvent(eventType: RunnerEventType, callback: (event: RunnerEvent) => void): () => void;
  onSessionEvent(eventType: SessionEventType, callback: (event: SessionEvent) => void): () => void;
  onAnyEvent(callback: (event: RunnerEvent | SessionEvent) => void): () => void;
  
  // State Queries
  isInitialized(): boolean;
  hasSession(label: string): boolean;
  getSessionCount(): number;
  
  // Utility
  clear(): Promise<void>;
  destroy(): Promise<void>;
}
