import { DataContainer } from "../../../Utils/DataContainer";
import { RcsbFvModulePublicInterface } from "@rcsb/rcsb-saguaro-app/lib/RcsbFvWeb/RcsbFvModule/RcsbFvModuleInterface";
import { PfvManagerInterface } from "./PfvManagerFactoryInterface";
import { RcsbFvStateInterface } from "../../../RcsbFvState/RcsbFvStateInterface";
import { RcsbFvTrackDataElementInterface } from "@rcsb/rcsb-saguaro/lib/RcsbDataManager/RcsbDataManager";
export interface CallbackManagerInterface<U> {
    structureViewerSelectionCallback(mode: 'select' | 'hover'): Promise<void>;
    featureClickCallback(e?: RcsbFvTrackDataElementInterface): void;
    highlightHoverCallback(selection: RcsbFvTrackDataElementInterface[]): void;
    pfvSelectionChangeCallback(selection: Array<RcsbFvTrackDataElementInterface>): void;
    modelChangeCallback(defaultAsymId?: string, defaultOperatorName?: string): Promise<void>;
    pfvChangeCallback(args: U): Promise<void>;
}
export interface CallbackManagerFactoryInterface<U> {
    getCallbackManager(config: CallbackConfigInterface): CallbackManagerInterface<U>;
}
export interface CallbackConfigInterface {
    rcsbFvContainer: DataContainer<RcsbFvModulePublicInterface>;
    stateManager: RcsbFvStateInterface;
    pfvFactory: PfvManagerInterface;
}
export declare abstract class AbstractCallbackManager<U> implements CallbackManagerInterface<U> {
    protected readonly rcsbFvContainer: DataContainer<RcsbFvModulePublicInterface>;
    protected readonly stateManager: RcsbFvStateInterface;
    protected pfvFactory: PfvManagerInterface;
    private readonly isInnerSelection;
    constructor(config: CallbackConfigInterface);
    structureViewerSelectionCallback(mode: 'select' | 'hover'): Promise<void>;
    pfvSelectionChangeCallback(selection: Array<RcsbFvTrackDataElementInterface>): void;
    abstract featureClickCallback(e: RcsbFvTrackDataElementInterface): void;
    abstract highlightHoverCallback(selection: RcsbFvTrackDataElementInterface[]): void;
    abstract modelChangeCallback(defaultAsymId?: string, defaultOperatorName?: string): Promise<void>;
    abstract pfvChangeCallback(args: U): Promise<void>;
    protected abstract innerStructureViewerSelectionChange(mode: "select" | "hover"): Promise<void>;
    protected abstract innerPfvSelectionChange(selection: Array<RcsbFvTrackDataElementInterface>): void;
}
