import type { Response } from 'express';
import { GuiReportBuilder, GuiReportBuilderResult } from '../../report-builder/gui';
import { BrowserFeature, Feature } from '../../constants';
import type { GuiCliOptions, ServerArgs } from '../index';
import type { TestBranch, TestEqualDiffsData, TestRefUpdateData } from '../../tests-tree-builder/gui';
import type { ReporterTestResult } from '../../adapters/test-result';
import type { Tree, TreeImage } from '../../tests-tree-builder/base';
import type { TestSpec } from '../../adapters/tool/types';
import type { AssertViewResult, ImageInfoUpdated } from '../../types';
import type { TestAdapter } from '../../adapters/test/index';
import type { TestCollectionAdapter } from '../../adapters/test-collection';
import type { ConfigAdapter } from '../../adapters/config';
export type ToolRunnerTree = GuiReportBuilderResult & Pick<GuiCliOptions, 'autoRun'> & {
    features: Feature[];
    browserFeatures: Record<string, BrowserFeature[]>;
};
export interface UndoAcceptImagesResult {
    updatedImages: TreeImage[];
    removedResults: string[];
}
export interface RunParams {
    retry?: boolean;
}
export declare class ToolRunner {
    private _testFiles;
    private _toolAdapter;
    private _tree;
    protected _collection: TestCollectionAdapter | null;
    private _globalOpts;
    private _guiOpts;
    private _reportPath;
    private _reporterConfig;
    private _eventSource;
    protected _reportBuilder: GuiReportBuilder | null;
    private _testAdapters;
    private _expectedImagesCache;
    static create<T extends ToolRunner>(this: new (args: ServerArgs) => T, args: ServerArgs): T;
    constructor({ paths, toolAdapter, cli }: ServerArgs);
    get config(): ConfigAdapter;
    get tree(): ToolRunnerTree | null;
    initialize(): Promise<void>;
    _readTests(): Promise<TestCollectionAdapter>;
    refreshTests(): Promise<void>;
    protected _ensureReportBuilder(): GuiReportBuilder;
    protected _ensureTestCollection(): TestCollectionAdapter;
    finalize(): Promise<void>;
    addClient(connection: Response): void;
    sendClientEvent(event: string, data: unknown): void;
    getTestsDataToUpdateRefs(imageIds: string[]): TestRefUpdateData[];
    getImageDataToFindEqualDiffs(imageIds: string[]): TestEqualDiffsData[];
    updateReferenceImage(tests: TestRefUpdateData[]): Promise<TestBranch[]>;
    undoAcceptImages(tests: TestRefUpdateData[]): Promise<UndoAcceptImagesResult>;
    findEqualDiffs(images: TestEqualDiffsData[]): Promise<string[]>;
    run(tests?: TestSpec[], runParams?: RunParams): Promise<boolean>;
    protected _handleRunnableCollection(): Promise<void>;
    protected _getTestAdapterById(updateData: TestRefUpdateData): TestAdapter;
    protected _prepareAssertViewResults(imagesInfo: TestRefUpdateData['imagesInfo'], testAdapter: TestAdapter): AssertViewResult[];
    protected _handleReferenceUpdate(testResult: ReporterTestResult, imageInfo: ImageInfoUpdated, state: string): void;
    _fillTestsTree(tree?: Tree): Promise<void>;
    protected _loadDataFromDatabase(): Promise<Tree | null>;
    protected _resolveImgPath(imgPath: string): string;
}
