import { CollectionSchema, ProductSchema } from '@byondrnd/showroom-schemas';
import { IApplication, IConfigurationFilter, IFavorite, IFavoriteProductSkuAndApplicationList, IProduct } from '../EventSystem/EventTypes';
import { Visualizer } from '../Visualizer';
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;
    }>;
    sceneFilters?: Record<string, Record<string, IConfigurationFilter[] | undefined> | undefined>;
    private products?;
    productsList: string[] | undefined;
    showroomClient?: ApolloClient<NormalizedCacheObject>;
    initialized: boolean;
    constructor(visualizer: Visualizer);
    loadProductsPage({ fetchPolicy, page, perPage, }: {
        fetchPolicy?: FetchPolicy;
        page: number;
        perPage: number;
        filters?: IConfigurationFilter[];
        application?: string;
    }): Promise<any>;
    init(sceneId: string): Promise<void>;
    fetchFilters({ application, sceneId }: {
        application: string;
        sceneId: string;
    }): Promise<any>;
    fetchProducts({ sceneId, from, limit, customFilterQuery, }: {
        sceneId: string;
        from: number;
        limit: number;
        customFilterQuery: Record<string, any> | undefined;
    }): Promise<any[] | undefined>;
    getSearchFilterProductCustomFieldsQuery(searchString: string): {
        $or: any[];
    } | undefined;
    getProductCustomFieldsQuery({ filters }: {
        filters: IConfigurationFilter[];
    }): {
        $and: any[];
    } | undefined;
    getSearchFilterProductFieldsQuery(searchString: string): {
        $or: {
            [x: string]: {
                $regex: string;
                $options: string;
            };
        }[];
    } | undefined;
    buildCustomFilterQuery({ application, filters, searchString, availabilityDateCustomFieldName, productsList, }: {
        filters?: IConfigurationFilter[];
        application: string;
        productsList?: string[];
        searchString: string | undefined;
        availabilityDateCustomFieldName: string | undefined;
    }): Record<string, any> | undefined;
    getMoreProducts({ sceneId, from, limit }: {
        sceneId: string;
        from: number;
        limit: number;
    }): Promise<IProduct[] | undefined>;
    setProductsList(skus: string[] | undefined): void;
    getProducts(): ProductSchema.IProduct[] | undefined;
    getProduct(productSku: string, temporal?: string): ProductSchema.IProduct | undefined;
    getProductList(sceneId: string): IProduct[];
    getProductListByProductFavorites(products: IFavoriteProductSkuAndApplicationList): IFavorite[] | undefined;
    getProductsMathchingCustomFields(products: ProductSchema.IProduct[], filters?: Array<IConfigurationFilter>, searchString?: string, fieldsIncludedByConfig?: string[]): ProductSchema.IProduct[];
    getProductsMathchingSearch(products: ProductSchema.IProduct[], searchString: string): ProductSchema.IProduct[];
    getProductsFromDate(products: ProductSchema.IProduct[], customFieldName: string | undefined): ProductSchema.IProduct[];
    getFullProductDetails(productId: string): Promise<any>;
    getApplicationsForProduct(sku: string): string[];
    getOriginalProductListForApplication(application: string): ProductSchema.IProduct[] | undefined;
    getProductListByApplication(application: string): IProduct[] | undefined;
    getFilters(sceneId: string): Array<IConfigurationFilter>;
    loadCatalogs(): Promise<any>;
    loadProductPage({ fetchPolicy, page, perPage, }: {
        fetchPolicy?: FetchPolicy;
        page: number;
        perPage: number;
    }): Promise<CollectionSchema.ICollection[]>;
    private updateFilters;
}
