import { CollectionSchema, ProductSchema } from '@byondrnd/showroom-schemas';
import { IApplication, IConfigurationFilter, IFavoriteProductSkuAndApplicationList, IProduct } from '../EventSystem/EventTypes';
import { Visualizer } from '../..';
import { ApolloClient, FetchPolicy } from '@apollo/client/core';
import { NormalizedCacheObject } from 'apollo-cache-inmemory';
export interface CatalogInfo {
    organization: string;
    catalog: string;
}
export declare class CatalogManager {
    catalog?: CollectionSchema.ICatalog;
    visualizer: Visualizer;
    catalogInfo?: CatalogInfo;
    selectionState: Map<string, {
        application?: IApplication | undefined;
        searchFilters?: {
            [application: string]: string;
        } | undefined;
        filters?: {
            [application: string]: IConfigurationFilter[];
        } | undefined;
    }>;
    cachedFilters?: Record<string, Record<string, IConfigurationFilter[] | undefined> | undefined>;
    private originalProducts?;
    private formattedProducts?;
    productsList: string[] | undefined;
    showroomClient?: ApolloClient<NormalizedCacheObject>;
    initialized: boolean;
    constructor(visualizer: Visualizer);
    loadCatalogs(): Promise<any>;
    loadProductsPage({ fetchPolicy, page, perPage, }: {
        fetchPolicy?: FetchPolicy;
        page: number;
        perPage: number;
        filters?: IConfigurationFilter[];
        application?: string;
    }): Promise<any>;
    init(sceneId: string): Promise<void>;
    getAsyncFilters(sceneId: string): Promise<Array<IConfigurationFilter>>;
    private updateCachedFilters;
    fetchFilters({ sceneId, application }: {
        sceneId: string;
        application: string;
    }): Promise<IConfigurationFilter[]>;
    fetchProducts({ from, limit, customFilterQuery, }: {
        from: number;
        limit: number;
        customFilterQuery: Record<string, any> | undefined;
    }): Promise<any[]>;
    getSearchFilterProductCustomFieldsQuery({ sceneId, searchString }: {
        searchString: string;
        sceneId: string;
    }): Promise<{
        $or: any[];
    } | undefined>;
    getSearchFilterProductFieldsQuery(searchString: string): {
        $or: {
            [x: string]: {
                $regex: string;
                $options: string;
            };
        }[];
    } | undefined;
    getProductCustomFieldsQuery({ application, sceneId }: {
        application: string;
        sceneId: string;
    }): {
        $and: any[];
    } | undefined;
    buildCustomFilterQuery({ application, sceneId, searchString, availabilityDateCustomFieldName, productsList, initialProduct, initialProducts, }: {
        application: string;
        sceneId: string;
        productsList?: string[];
        initialProduct?: string;
        initialProducts?: string[];
        searchString: string | undefined;
        availabilityDateCustomFieldName: string | undefined;
    }): Promise<Record<string, any> | undefined>;
    getMoreProducts({ sceneId, from, limit, initialProduct, initialProducts, application: paramApplication, cacheProducts, }: {
        application?: string;
        initialProduct?: string;
        initialProducts?: string[];
        sceneId: string;
        from: number;
        limit: number;
        cacheProducts?: boolean;
    }): Promise<{
        originalProducts: ProductSchema.IProduct[];
        formattedProducts: IProduct[];
    }>;
    setProductsList(skus: string[] | undefined): void;
    getOriginalProducts(): ProductSchema.IProduct[] | undefined;
    getFormattedProducts(): IProduct[] | undefined;
    setCurrentApplication({ application, sceneId }: {
        application: IApplication;
        sceneId: string;
    }): void;
    clearCurrentApplication({ sceneId }: {
        sceneId: string;
    }): void;
    getOriginalProduct(productSku: string): ProductSchema.IProduct | undefined;
    getFormattedProduct(productSku: string): IProduct | undefined;
    getProductListByProductFavorites(products: IFavoriteProductSkuAndApplicationList): Promise<{
        product: IProduct;
    }[] | undefined>;
}
