import { IGXE } from "@intelligentgraphics/igd.core";
import { IPlacement } from "./GfxRepresentation";
import { ArticleNumber } from "./ArticleNumber";
export declare type TVariantText = {
    key: string;
    value: string;
}[];
export interface ArticleInfo {
    name: string | undefined;
    varCode: string;
    shortText: string[];
    longText: string[];
    varText: TVariantText;
    manufacturerId: string;
    manufacturerName: string;
    programId: string;
    programName: string;
    image: string | undefined;
    prices: IGXE.IPrice[];
}
export interface ArticleData {
    /**
     * Controls wether the commercial representation of an article should be hidden for the user
     *
     * @type {boolean}
     */
    hidden?: boolean;
    dontRestore?: boolean;
    [key: string]: any;
}
export declare type ArticleTypes = "commercial" | "graphical" | "impression" | "set" | "headItem";
export interface ArticleCategories {
    /**
     * This article can never move on its own.
     * When it's direct parent is another gfx article, it has to be moved relative to the parent movement.
     * When it's direct parent is a commercial article, it can only be moved together with all other children of the commercial article
     *
     * @type {boolean}
     */
    onlyGroupManipulable: boolean;
    /**
     * This article can only be configured through parents
     *
     * @type {boolean}
     */
    onlyConfigurableThroughParent: boolean;
    /**
     * This article can only be removed by deleting the first removeable parent
     *
     * @type {boolean}
     */
    onlyRemoveableThroughParent: boolean;
}
export interface SourcePlacement extends IPlacement {
    type: "relativeToPlacementParent" | "absolute";
}
export interface Article {
    /**
     * Commercial id of an Article
     *
     * @type {string}
     */
    comId: string;
    /**
     * Graphical id of an article (rootId)
     *
     * @type {string}
     */
    gfxId: string | undefined;
    properties: IGXE.IProperty[];
    configuration: IGXE.ArticleConfigurationValues;
    articleNumber: ArticleNumber | undefined;
    /**
     * The current final articleId
     *
     * @type {string}
     */
    articleId: string;
    /**
     * The source manufacturer and catalog id
     *
     * @type {string}
     */
    source: string;
    /**
     * Custom article data
     *
     * @type {ArticleData}
     */
    data: ArticleData;
    /**
     * Child articles of this article
     *
     * @type {string[]}
     */
    children: string[];
    /**
     * Parent article
     *
     * @type {(string | undefined)}
     */
    parent: string | undefined;
    categories: ArticleCategories;
    placement: Required<IPlacement> | undefined;
    info: ArticleInfo;
    type: ArticleTypes;
    sourceData: object;
    sourcePlacement: SourcePlacement | undefined;
}
