import { TypedEmitter } from 'tiny-typed-emitter';
import { Utils, AppManager, Elements } from '@byondrnd/byond-web-lib';
import { CatalogManager } from './Managers/CatalogManager';
import { ProductsManager } from './Managers/Scene/ProductsManager/ProductsManager';
import { IEventSystem, EventSystemEventSignature, EventSystemEventDataSignature, IConfigurationFilter, IProduct, IApplication, VisualizerElement, IVisualizer, IScene, ISceneConfigurationEntityOutput, IFavoriteSceneList, IFavoriteProductList, IFavoriteProductSkuAndApplicationList, ICatalogFieldsMapping } from './EventSystem/EventTypes';
import { SceneMetadataManager } from './Managers/Scene/SceneMetadataManager';
import { ImageOptimizeService } from '../utils/ImageOptimizeService';
declare type TProgress = {
    percent?: number;
};
declare type THotspotPoint = {
    application: string;
    title: string;
    elm: Elements.Screens.ScreenImage;
};
export declare type TDefaultProducts = Record<string, string>;
export declare class Visualizer extends TypedEmitter<IEventSystem> implements IVisualizer {
    appManager: AppManager;
    sceneSelector: string;
    mainContainerElement: VisualizerElement;
    sceneId?: string;
    sceneConfigurationLabel?: string;
    catalogManager: CatalogManager;
    productsManager: ProductsManager;
    sceneMetadataManager: SceneMetadataManager;
    debug: boolean;
    pubs: Utils.RxUtils.Subscription[];
    initAndLoaded: boolean;
    defaultProducts?: TDefaultProducts;
    defaultProduct?: string;
    maxFaceSize: number | null;
    maxFaceSizeMobile: number | null;
    experienceId?: string;
    experienceHash?: string;
    hotspots: THotspotPoint[];
    divs: HTMLDivElement[];
    divFirstGo: boolean[];
    ImageOptimizeService: ImageOptimizeService;
    imageOptimizerUrl: string;
    visualizerLoaded: undefined | {
        visualizer: Visualizer;
        experienceConfiguration: ISceneConfigurationEntityOutput;
    };
    sceneLoading: undefined | {
        scene: IScene;
        sceneConfiguration: ISceneConfigurationEntityOutput;
    };
    defaultApplication: string | undefined;
    constructor(containerSelector: string, sceneSelector: string);
    initAndLoad(): Promise<void>;
    setScene(sceneId: string, preventDefaultProducts?: boolean, preventEvent?: boolean, defaultApplication?: string): Promise<void>;
    emitRender(): void;
    setFavoriteScenes(favoriteScenes: IFavoriteSceneList): void;
    setFavoriteProducts(favoriteProducts: IFavoriteProductList | IFavoriteProductSkuAndApplicationList): void;
    private onZoneLoaded;
    private initCatalog;
    initialProductDisplay(params?: {
        defaultProduct?: string;
        defaultProducts?: TDefaultProducts;
    }): Promise<void>;
    savedUserProductsDisplay(userSetProducts: TDefaultProducts): Promise<void>;
    setSceneConfigurationLabel({ sceneConfigurationLabel, sceneId, productsList, defaultApplication, }: {
        sceneConfigurationLabel?: string;
        sceneId?: string;
        productsList?: string[];
        defaultApplication?: string;
    }): Promise<void>;
    getCurrentSceneConfiguration(): ISceneConfigurationEntityOutput;
    private subEventsAnalytics;
    private emitEventsAnalytics;
    getCurrentCatalogFieldsMap(): ICatalogFieldsMapping | undefined;
    getCurrentApplication(): IApplication | undefined;
    setCurrentApplication(application: IApplication | string, evenIfInView?: boolean): Promise<IApplication | undefined>;
    getFilters(): Array<IConfigurationFilter>;
    getCurrentFilters(): Array<IConfigurationFilter>;
    setSearchFilter(searchString: string): void;
    setFilter(filters: IConfigurationFilter[]): Array<IConfigurationFilter>;
    getDisplayedProduct(application: IApplication): IProduct | undefined;
    getDisplayedProducts(): Array<IProduct>;
    getProductList(): Array<IProduct> | undefined;
    getApplicationsList(): Array<IApplication>;
    addProductToFavorites(productSku: string, application: string): IFavoriteProductList;
    removeProductFromFavorites(productSku: string, application: string): IFavoriteProductList;
    getFavoriteProducts(): IFavoriteProductList;
    addFavoriteScene(): Promise<IFavoriteSceneList>;
    removeFavoriteScene(setId: string): IFavoriteSceneList;
    getFavoriteScenes(): IFavoriteSceneList;
    getSceneList(): IScene[];
    addProductToCart(product: IProduct): void;
    orderSample(product: IProduct): void;
    getCurrentSceneImage(): Promise<string>;
    getCurrentScene(): IScene;
    processId: string;
    emitAsyncOperationProgress: (progress?: TProgress | undefined) => boolean;
    displayProduct(productSku: string, application: IApplication, animateToProduct?: boolean): Promise<void>;
    displaySceneFromFavorites(id: string): Promise<void>;
    fetchMetadata(): Promise<string>;
    rotateCameraToApplication({ application, evenIfInView }: {
        application: string;
        evenIfInView?: boolean;
    }): Promise<void>;
    private initExperience;
    THREEBox: any;
    isObjectVisible: any;
    private isScreenElementVisible;
    emitRenderEvent(): void;
    private toScreenPosition;
    private unRegisterEvents;
    private registerEvents;
    private navigate;
    private loadProps;
    emit(eventName: EventSystemEventSignature, ...args: EventSystemEventDataSignature): boolean;
}
export {};
