import { Omit } from "@intelligentgraphics/ig.utilities";
import { IGXE } from "@intelligentgraphics/igd.core";
import { GfxRepresentationOptions, GfxRepresentationResult } from "./GfxRepresentation";
import { CreateOperationResult, ChangeOperationResult, DeleteOperationResult } from "./OperationResults";
import { ArticleQuery } from "./ArticleQuery";
import { ArticleNumber } from "./ArticleNumber";
import { ArticleData } from "./Article";
import { IPlacement } from "./GfxRepresentation";
export declare type ConfigurationServiceCreateResult = Omit<CreateOperationResult, "source" | "gfxId">;
export declare type ConfigurationServiceConfigureResult = ChangeOperationResult;
export declare type ConfigurationServiceDeleteResult = DeleteOperationResult;
export declare type ConfigurationServiceTOperationResult = ConfigurationServiceCreateResult | ConfigurationServiceConfigureResult | ConfigurationServiceDeleteResult;
export declare type ConfigurationServiceTypeMapping = {
    sessionService: ISessionConfigurationService;
};
export declare type ConfigurationServiceType = keyof ConfigurationServiceTypeMapping;
export interface ISessionConfigurationService<T = any> {
    save(articleQuery: ArticleQuery): Promise<T>;
    restore(articleQuery: ArticleQuery, data: T): Promise<ConfigurationServiceTOperationResult[]>;
}
export interface ConfigurationServiceCreateArticleParams {
    articleNumber: ArticleNumber;
    data?: ArticleData;
    initialConfiguration?: IGXE.PropertyValueChanges | string;
    initialPlacement?: IPlacement;
}
export interface IConfigurationService {
    is<K extends ConfigurationServiceType>(name: K): this is ConfigurationServiceTypeMapping[K];
    createArticle(articleQuery: ArticleQuery, params: ConfigurationServiceCreateArticleParams): Promise<ConfigurationServiceTOperationResult[]>;
    deleteArticle(articleQuery: ArticleQuery, comId: string): Promise<ConfigurationServiceTOperationResult[]>;
    cloneArticle(articleQuery: ArticleQuery, comId: string, initialConfiguration?: IGXE.IArticleConfiguration): Promise<ConfigurationServiceTOperationResult[]>;
    changeProperties(articleQuery: ArticleQuery, comId: string, changes: IGXE.PropertyValueChanges): Promise<ConfigurationServiceTOperationResult[]>;
    getGfxRepresentation(articleQuery: ArticleQuery, comId: string, options?: GfxRepresentationOptions): Promise<GfxRepresentationResult>;
}
