import { IGXA } from "@intelligentgraphics/igd.core";
/**
 * Abstract definition of catalog managers.
 * The following public methods must be implemented by a class to be a
 * compatible Catalog processor and be usable by i.e. a visual catalog
 * component.
 */
export interface ICatalogManager {
    /** Returns the class name for identifying instances at runtime */
    getClassName(): string;
    /**
     * Retrieves the content of a folder.
     * @param folderID ID of the folder. undefined should retrieve the root folder.
     * @returns {Promise<IGXA.TAnyItem[]>}
     * @memberof ICatalogManager
     */
    getFolderContent(folderID: string | undefined): Promise<IGXA.TAnyItem[]>;
    /**
     * Retrieves folder path to Item.
     * Doesn't include item id in array, unless it is a folderId.
     *
     * Returns undefined in case of non found id
     * @param {string} id
     * @returns {Promise<string[]>} Path to item
     * @memberof ICatalogManager
     */
    getItemPath(id: string): Promise<string[] | undefined>;
    /**
     * Searches the catalog.
     *
     * @param {string} searchTerm  text that should be searched.
     * @returns {Promise<IGXA.TAnyItem[]>}
     * @memberof ICatalogManager
     */
    searchCatalog(searchTerm: string): Promise<IGXA.TAnyItem[]>;
    /**
     * Searches an article and reports the first folder the article is found in.
     *
     * Resolves with folderID if found. Rejects if none is found
     *
     * @param {string} baseArticleID ID of article that should be searched.
     * @returns {Promise<string>}
     * @memberof ICatalogManager
     */
    getFolderOfArticle(baseArticleID: string): Promise<string | undefined>;
    /**
     * Retrieves the addables of an item
     *
     * @param {string} baseArticleID number of the base article for which addables should be searched
     * @returns {Promise<IGXA.IArticleItem[]>}
     * @memberof ICatalogManager
     */
    getAddables(baseArticleID: string): Promise<IGXA.IArticleItem[]>;
    /** Retrieves the catalog title.
     * @returns the title as Promise
     */
    getTitle(): Promise<string | undefined>;
    /** Retrieves the catalog image.
     * @returns the image URL as Promise
     */
    getImage(): Promise<string | undefined>;
    /** Retrieves the folder item.
     * @param folderID internal ID of the folder.
     * @returns the folder item as Promise
     */
    getFolder(folderID: string): Promise<IGXA.IFolderItem | IGXA.IMultiArticleItem | undefined>;
    getArticle(articleID: string): Promise<IGXA.IArticleItem | undefined>;
    /**
     * Retrieves set item or undefiend
     * @param setID set id
     * @returns set item or undefined
     */
    getSet(setID: string): Promise<IGXA.ISetItem | undefined>;
    /** Retrieves the parent folder item.
     * @param folderID internal ID of the folder.
     * @returns the parent folder item as Promise
     */
    getParentFolder(folderID: string): Promise<IGXA.IFolderItem | IGXA.IMultiArticleItem | undefined>;
}
