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 { ProductSchema } from '@byondrnd/showroom-schemas';
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 type TVisibleArea = {
    left: number;
    top: number;
    right: number;
    bottom: number;
};
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[];
    defaultProducts?: TDefaultProducts;
    defaultProduct?: string;
    maxProductMapSizeMobile: number | null;
    maxMapSize: number | null;
    maxMapSizeMobile: number | null;
    maxProductMapSize: 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;
    };
    sceneLoaded: undefined | {
        scene: IScene;
        sceneConfiguration: ISceneConfigurationEntityOutput;
    };
    defaultApplication: string | undefined;
    containerSelector: string;
    applicationNames: string[];
    visibleMiddleX: number;
    visibleMiddleY: number;
    visibleArea: TVisibleArea;
    constructor(containerSelector: string, sceneSelector: string);
    readAttributes(): void;
    initAndLoad(): Promise<void>;
    resetResize(): void;
    setScene({ sceneId, preventDefaultProducts, preventEvent, }: {
        sceneId?: string;
        preventDefaultProducts?: boolean;
        preventEvent?: boolean;
    }): Promise<void>;
    setFavoriteScenes(favoriteScenes: IFavoriteSceneList): void;
    setFavoriteProducts(favoriteProducts: IFavoriteProductList | IFavoriteProductSkuAndApplicationList): void;
    private getApplicationsFromScreenElements;
    private getHotspotPoints;
    private initCatalog;
    initialProductDisplay(params?: {
        defaultProduct?: string;
        defaultProducts?: TDefaultProducts;
    }): Promise<void>;
    savedUserProductsDisplay(userSetProducts: TDefaultProducts): Promise<void>;
    getCurrentSceneConfiguration(): ISceneConfigurationEntityOutput;
    displayProductOnMesh(mesh: any, productSku: string): Promise<void>;
    private subEventsAnalytics;
    private emitEventsAnalytics;
    private emitPageViewAnalytics;
    getCurrentCatalogFieldsMap(): ICatalogFieldsMapping | undefined;
    formatProduct({ product }: {
        product: ProductSchema.IProduct;
    }): IProduct;
    getCurrentApplication(): IApplication | undefined;
    setCurrentApplication({ application, enableRotate, rotateOnlyWhenOutOfView, rotateToCenterEvenIfnView, }: {
        application: IApplication | string;
        enableRotate?: boolean;
        rotateOnlyWhenOutOfView?: boolean;
        rotateToCenterEvenIfnView?: boolean;
    }): Promise<IApplication | undefined>;
    getFilters(): Array<IConfigurationFilter>;
    getCurrentFilters(): IConfigurationFilter[];
    getCurrentSearchText(): string;
    setSearchFilter(searchString: string): void;
    setFilter(filters: IConfigurationFilter[]): Array<IConfigurationFilter> | undefined;
    getDisplayedProduct(application: IApplication | string): IProduct | undefined;
    getDisplayedProducts(): Array<IProduct>;
    getProductList(): Array<IProduct> | undefined;
    getMoreProducts({ from, limit }: {
        from: number;
        limit: number;
    }): Promise<Array<IProduct> | undefined>;
    getApplicationsList(): IApplication[];
    getApplication({ application }: {
        application: string;
    }): IApplication | undefined;
    addProductToFavorites(product: IProduct): 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 | undefined;
    emitAsyncOperationProgress: (progress?: TProgress | undefined) => boolean;
    displayProduct(productSku: string, _applications: IApplication | string[] | string, animateToProduct?: boolean): Promise<void>;
    displayFavoriteProduct({ sku, applications }: {
        sku: string;
        applications: string[];
    }): Promise<void>;
    displaySceneFromFavorites(id: string): Promise<void>;
    fetchMetadata(): Promise<string>;
    setVisibleArea({ visibleMiddleX, visibleMiddleY, visibleArea, }: {
        visibleMiddleX: number;
        visibleMiddleY: number;
        visibleArea: TVisibleArea;
    }): Promise<void>;
    rotateCameraToApplication({ application, rotateOnlyWhenOutOfView, rotateToCenterEvenIfnView, }: {
        application: string;
        rotateOnlyWhenOutOfView?: boolean;
        rotateToCenterEvenIfnView?: boolean;
    }): Promise<void>;
    THREEBox: any;
    isObjectVisible: any;
    private isScreenElementVisible;
    emitRenderEvent(): void;
    private isPositionInView;
    private toScreenPosition;
    private unRegisterEvents;
    private registerEvents;
    private navigate;
    private initExperience;
    private loadProps;
    emit(eventName: EventSystemEventSignature, ...args: EventSystemEventDataSignature): boolean;
}
export declare const init: (mainElement: Element) => void;
export declare const startLogicVisualizer: () => void;
export {};
