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 } 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;
    constructor(containerSelector: string, sceneSelector: string);
    initAndLoad(): Promise<void>;
    setScene(sceneId: string, preventDefaultProducts?: boolean, preventEvent?: boolean, preventDefaultApplication?: boolean): Promise<void>;
    setFavoriteScenes(favoriteScenes: any): void;
    setFavoriteProducts(favoriteProducts: any): void;
    private onZoneLoaded;
    private initCatalog;
    initialProductDisplay(params?: {
        defaultProduct?: string;
        defaultProducts?: TDefaultProducts;
    }): Promise<void>;
    savedUserProductsDisplay(userSetProducts: TDefaultProducts): Promise<void>;
    setSceneConfigurationLabel({ sceneConfigurationLabel, sceneId, productsList, }: {
        sceneConfigurationLabel?: string;
        sceneId?: string;
        productsList?: string[];
    }): Promise<void>;
    getCurrentSceneConfiguration(): import("./EventSystem/EventTypes").ISceneConfigurationEntityOutput;
    private subEventsAnalytics;
    private emitEventsAnalytics;
    getCurrentCatalogFieldsMap: () => import("./EventSystem/EventTypes").ICatalogFieldsMapping;
    getCurrentApplication(): IApplication;
    setCurrentApplication(application: IApplication): Promise<IApplication>;
    getFilters(): IConfigurationFilter[];
    getCurrentFilters(): IConfigurationFilter[];
    setFilter(filters: IConfigurationFilter[]): IConfigurationFilter[];
    getDisplayedProduct(application: IApplication): IProduct;
    getDisplayedProducts(): IProduct[];
    getProductList(): IProduct[];
    getApplicationsList(): IApplication[];
    addProductToFavorites(productSku: string, application: string): import("./EventSystem/EventTypes").IFavorite[];
    removeProductFromFavorites(productSku: string, application: string): import("./EventSystem/EventTypes").IFavorite[];
    getFavoriteProducts(): import("./EventSystem/EventTypes").IFavorite[];
    addFavoriteScene(): Promise<import("./EventSystem/EventTypes").IFavoriteScene[]>;
    removeFavoriteScene(setId: string): import("./EventSystem/EventTypes").IFavoriteScene[];
    getFavoriteScenes(): import("./EventSystem/EventTypes").IFavoriteScene[];
    getSceneList(): IScene[];
    addProductToCart(product: IProduct): void;
    orderSample(product: IProduct): void;
    getCurrentSceneImage(): Promise<string>;
    getCurrentScene(): IScene;
    processId: string;
    emitAsyncOperationProgress: (progress?: TProgress) => boolean;
    displayProduct(productSku: string, application: IApplication, animateToProduct?: boolean): Promise<void>;
    displaySceneFromFavorites(id: string): Promise<void>;
    fetchMetadata(): Promise<string>;
    private initExperience;
    THREEBox: any;
    isObjectVisible: any;
    private isScreenElementVisible;
    emitRenderEvent(): void;
    rotateCameraToApplication(application: string): Promise<void>;
    private toScreenPosition;
    private unRegisterEvents;
    private registerEvents;
    private navigate;
    private loadProps;
    emit(eventName: EventSystemEventSignature, ...args: EventSystemEventDataSignature): boolean;
}
export {};
