import { IApiSuccess, IApiPayload, IDataTableQuery, IDataFetcherResponse } from '../../../../../_common';
import { IEntityContainer, ITenantAttributeSet, ITenantAttributeScope, ITenantAttributeLanguage, IColumnDefinitionContainer, IEntityDependencyContainer } from '../../../../../DataHub';
import { IPIMProduct, IPIMRemovedProducts, IPIMArchivedProducts, IPIMRestoredProducts } from './PIM.models';

export declare const pimApi: {
    /** will not delete products that are not in the recycle bin */
    deleteProductsFromRecycleBin(ids: string[]): Promise<IPIMRemovedProducts>;
    /** Get HTML import paths for all value edit datatypes */
    getAllDataTypeImports(): Promise<IApiPayload<string[]>>;
    /** Get entity data */
    getEntityData(entityId: number, freezeEntityIfPossible: boolean): Promise<IApiPayload<IPIMProduct> & {
        frozen: boolean;
    }>;
    /** getEntityIdAndAttributeSetIdBySku */
    getEntityIdAndAttributeSetIdBySku(sku: string): Promise<IApiSuccess & {
        id: number;
        attributeSetId: number;
    }>;
    /** update the datahub values of a pim product optionally can update sku of the pim product aswell */
    save(product: IPIMProduct): Promise<IApiSuccess>;
    /** restore all products to active status */
    getRecycleBin(query: IDataTableQuery): Promise<IDataFetcherResponse<IPIMProduct>>;
    /** returns a list of all products that are currently in the archive */
    getArchive(query: IDataTableQuery): Promise<IDataFetcherResponse<IPIMProduct>>;
    /** restores products from the recycle bin or archive */
    restoreProducts(ids: number[]): Promise<IPIMRestoredProducts>;
    /** In error cases the deletion of the remaining products is continued and log entries are created. products can only be fully deleted from recycle bin (deleteProductsFromRecycleBin) */
    deleteProducts(ids: number[]): Promise<IPIMRemovedProducts>;
    /** Archive products. */
    archiveProducts(ids: number[]): Promise<IPIMArchivedProducts>;
    /** Archive products. */
    getLanguages(): Promise<IDataFetcherResponse<ITenantAttributeLanguage>>;
    /** Get a list of pim Products that are not in archive and not in recycle bin */
    listProducts(query: IDataTableQuery): Promise<IDataFetcherResponse<IPIMProduct>>;
    /** Get available scopes */
    getActiveScopes(): Promise<IDataFetcherResponse<ITenantAttributeScope>>;
    /** Create pim product */
    create(product: IPIMProduct): Promise<IApiSuccess & {
        product: IPIMProduct;
    }>;
    /** get a list of all active pim attribute sets */
    listAvailableAttributeSets(): Promise<IDataFetcherResponse<ITenantAttributeSet> & {
        allowedCreateAction: boolean;
    }>;
    /** Get column definitions of Entity by entity type class name */
    getColumnDefinitions(query: object): Promise<IApiPayload<IColumnDefinitionContainer>>;
    /** the sku of the copied product will be autogenerated as follows: "(Copy n)" will be appendend to the sku with n being the first available number */
    cloneProduct(id: number | string): Promise<IApiSuccess & {
        product: IPIMProduct;
    }>;
    /** Get all dependencies for a specific entity */
    getDependencies(query: IDataTableQuery & {
        entityId: number;
    }): Promise<IDataFetcherResponse<IEntityDependencyContainer>>;
    /** Get all dependencies for a specific entity */
    rerunMappings(entityId: string | number, dependencies: number[]): Promise<IApiSuccess>;
    /** listAttributesLanguagesAndScopes */
    listAttributesLanguagesAndScopes(entityId: number): Promise<IApiPayload<IEntityContainer>>;
    /** listAttributesLanguagesAndScopesBySetId */
    listAttributesLanguagesAndScopesBySetId(dhAttributeSetId: number): Promise<IApiPayload<IEntityContainer>>;
    /** Get entity data */
    get(entityId: string | number, freezeEntityIfPossible: boolean): Promise<IApiPayload<IPIMProduct> & {
        frozen: boolean;
    }>;
    /** Thaw an entity */
    thaw(entityId: number): Promise<IApiSuccess>;
    /** changeAttributeSet */
    changeAttributeSet(entityId: number, attributeSetId: number, thawAfterSave: boolean): Promise<IApiSuccess>;
    /** getPendingMappings */
    getPendingMappings(entityId: number): Promise<IApiPayload<object>>;
};
