import { IRuntimeAction } from '../../IRuntimeAction';
import { ITimerRuntime } from '../../ITimerRuntime';
import { RuntimeMetric } from '../../RuntimeMetric';
import { IRuntimeEvent } from '../../IRuntimeEvent';
import { EventHandler } from '../EventHandler';
import { IRuntimeBlock } from '../../IRuntimeBlock';
import { JitStatement } from '../../JitStatement';
import { BlockKey } from '../../BlockKey';
import { ResultSpanBuilder } from '../../metrics/ResultSpanBuilder';
import { RuntimeSpan } from '../../RuntimeSpan';
/**
 * Legacy base class for runtime blocks, now extends AbstractBlockLifecycle
 * to leverage the template method pattern while maintaining backward compatibility
 */
export declare abstract class RuntimeBlock implements IRuntimeBlock {
    sources: JitStatement[];
    constructor(sources: JitStatement[]);
    duration?: number | undefined;
    blockId: string;
    blockKey: BlockKey;
    parent?: IRuntimeBlock | undefined;
    leaf: boolean;
    private spanBuilder;
    handlers: EventHandler[];
    /**
     * Get the ResultSpanBuilder to create and manage spans for this block
     * @returns The ResultSpanBuilder instance for this block
     */
    getSpanBuilder(): ResultSpanBuilder;
    /**
     * Temporary method to access spans for testing compatibility
     * @returns Array of RuntimeSpan objects from the span builder without auto-closing
     */
    spans(): RuntimeSpan[];
    selectMany<T>(fn: (node: JitStatement) => T[]): T[];
    protected abstract onEnter(runtime: ITimerRuntime): IRuntimeAction[];
    protected abstract onLeave(runtime: ITimerRuntime): IRuntimeAction[];
    protected abstract onNext(runtime: ITimerRuntime): IRuntimeAction[];
    protected abstract onBlockStart(runtime: ITimerRuntime): IRuntimeAction[];
    protected abstract onBlockStop(runtime: ITimerRuntime): IRuntimeAction[];
    enter(runtime: ITimerRuntime): IRuntimeAction[];
    leave(runtime: ITimerRuntime): IRuntimeAction[];
    next(runtime: ITimerRuntime): IRuntimeAction[];
    handle(runtime: ITimerRuntime, event: IRuntimeEvent, system: EventHandler[]): IRuntimeAction[];
    /**
     * Retrieves a sequence of consecutive child JitStatements that are part of a 'compose' group.
     * Iteration starts from the given startIndex and continues as long as subsequent statements
     * have a LapFragment with group type 'compose'.
     *
     * @param startIndex The index in `this.sources` to start looking for the compose group.
     * @returns An array of JitStatement objects belonging to the consecutive compose group.
     */
    nextChildStatements(runtime: ITimerRuntime, startIndex: number): JitStatement[];
    onStart(runtime: ITimerRuntime): IRuntimeAction[];
    onStop(runtime: ITimerRuntime): IRuntimeAction[];
    /**
     * Generates a complete set of metrics for this runtime block using the RuntimeMetricBuilder.
     * This method provides a simplified way to collect metrics from fragments by type.
     *
     * @param runtime The timer runtime instance
     * @returns An array of RuntimeMetric objects containing effort, repetitions, distance, and resistance
     */
    metrics(runtime: ITimerRuntime): RuntimeMetric[];
}
