import { Dictionary } from '@jscrpt/common';
import { Observable } from 'rxjs';
import { RelationsProcessorComponent } from '../../misc/types';
import { RelationsComponentEndpoints, RelationsComponentStateDebugInfo, RelationsDataTransferDebugInfo, RelationsDataTransferIdDebugInfo, RelationsStepDebugInfo } from './relationsDebugger.interface';
import { RelationsDataTransferInstructionImpl } from '../relationsProcessor/relationsDataTransferInstruction';
import { RelationsProcessorComponentData, RelationsProcessorInputOutputData } from '../relationsProcessor/relationsProcessor.interface';
import * as i0 from "@angular/core";
/**
 * Service used for debugging relations, use actual implementation instead of this
 */
export declare abstract class RelationsDebugger {
    /**
     * Occurs when current step index changes
     */
    abstract get stepChange(): Observable<void>;
    /**
     * Initialize debugger with processed relations metadata
     * @param relations - Relations used for initialization
     * @param backwardRelations - Backward relations used for initialization
     */
    abstract initialize(relations: Dictionary<RelationsProcessorComponentData>, backwardRelations: Dictionary<RelationsProcessorInputOutputData[]>): void;
    /**
     * Debugs register component into relations
     * @param id - Id of component that has been registered
     * @param component - Instance of registered component
     */
    abstract registerComponent(id: string, component: RelationsProcessorComponent): void;
    /**
     * Debugs unregister component from relations
     * @param id - Id of component that has been unregistered
     * @param component - Instance of unregistered component
     */
    abstract unregisterComponent(id: string, component: RelationsProcessorComponent): void;
    /**
     * Debug transfer data
     * @param transfer - Transfer that will handle transfering data
     * @param options - Options for storing debug information for data transfer
     */
    abstract transferData(transfer: RelationsDataTransferInstructionImpl & Partial<RelationsDataTransferIdDebugInfo>, options: RelationsDataTransferDebugInfo): void;
    /**
     * Gets currently registered components
     */
    abstract getCurrentComponents(): Dictionary<string[]>;
    /**
     * Gets component definition
     * @param id - Id of component which definition will be obtained
     */
    abstract getComponentDef(id: string): RelationsComponentEndpoints | null;
    /**
     * Gets component state
     * @param id - Id of component whose state is going to be read
     */
    abstract getComponentState(id: string): RelationsComponentStateDebugInfo[];
    /**
     * Gets component relations options
     * @param id - Id of component whose relations options are going to be read
     */
    abstract getComponentRelationsOptions(id: string): unknown;
    /**
     * Gets last step or null if is already on last step
     */
    abstract getLastStep(): RelationsStepDebugInfo | null;
    /**
     * Gets first step or null if is already on first step
     */
    abstract getFirstStep(): RelationsStepDebugInfo | null;
    /**
     * Gets next step or null if is already on last step
     */
    abstract getNextStep(): RelationsStepDebugInfo | null;
    /**
     * Gets previous step or null if is already on first step
     */
    abstract getPreviousStep(): RelationsStepDebugInfo | null;
    /**
     * Gets current step or null if there are no steps
     */
    abstract getCurrentStep(): RelationsStepDebugInfo | null;
    /**
     * Clears all recorded steps
     */
    abstract clearSteps(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<RelationsDebugger, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<RelationsDebugger>;
}
//# sourceMappingURL=relationsDebugger.service.d.ts.map