interface FormulaModel {
    operator: string;
    values: number[];
}
interface PricingRulePropertyModel {
    propertyID: number;
    functionName: string;
}
interface IContext {
    sides: any;
    items: any;
    design: MPlaza.Design;
}
export declare class DesignPriceCalculatorRuleFactory {
    static create: (product: any, apiUrl?: string, token?: string, isOwin?: boolean, cloudFlareApiUrl?: string, clientLang?: string) => Promise<DesignPriceCalculatorRuleBased>;
}
export declare class DesignPriceCalculatorRuleBased {
    colorID: number;
    private product?;
    private pricings?;
    private pricing?;
    private properties?;
    private config;
    constructor(apiUrl?: string, token?: string, isOwin?: boolean, cloudFlareApiUrl?: string, clientLang?: string);
    init: (product: any) => Promise<void>;
    getPricings: (product: any, callback: (pricings: any, properties?: PricingRulePropertyModel[]) => void) => Promise<void>;
    getPricing: (design: any) => any;
    distinct: (value: any, index: any, self: any) => boolean;
    ElementSizeFunction: (pContext: any, formula: FormulaModel) => {
        result: boolean;
        multiplier: number;
        items: any;
    };
    NumberOfElementsSimplifiedFunction: (pContext: any, formula: FormulaModel) => {
        result: boolean;
        multiplier: any;
        items: any;
    };
    LinesLengthFunction: (pContext: any, formula: FormulaModel) => any;
    AmountOfElementsFunction: (pContext: any, formula: FormulaModel) => any;
    AmountOfUsedColorsFunction: (pContext: any, formula: FormulaModel) => any;
    CanvasSizeFunction: (pContext: IContext, formula: FormulaModel) => any;
    DesignSizeFunction: (pContext: any, formula: FormulaModel) => any;
    DesignTextLengthFunction: (pContext: any, formula: FormulaModel) => any;
    CustomizedSidesFunction: (pContext: any, formula: FormulaModel) => any;
    TextLengthFunction: (pContext: any, formula: FormulaModel) => any;
    conditionsToConditionsGroupByFormula: (conditions: any) => {
        formula: string;
        position: any;
        conditions: any[];
    }[];
    getFunctionName: (properties: any, rule: any) => any;
    GetContextForRule: (rule: any, product: any, design: any, sidesOnWhichThePriceIsEnabled: any, attributeMatchColorId?: number | null) => IContext;
    isUsingAmountOfColors: (printTypeID: number) => boolean;
    getPremiumPhotosPrice: (design: any, quantity: number) => number;
    /**
     * Get Image Price
     *
     * Metodo che calcola il prezzo per le immagini nel design a cui a backoffice
     * è stato valorizzato un prezzo
     *
     * @author f.checchia
     *
     * @param design Il design in input
     * @param {number} quantity La quantità del prodotto che si sta acquistando
     *
     * @return {number} Il prezzo complessivo delle immagini per la quantità
     *
     * */
    getImagePrice: (design: any, quantity: number) => number;
    getMatchedConditions: (design: any, quantity: number, includePercentage: boolean, attributeMatchColorId?: number | null) => any;
    calculate: (design: any, quantity: number, attributeMatchColorId?: number | null, isPricingAdvancedEnabled?: boolean) => number;
    getPricingAdditionalInfo: (printTypeID: number) => {
        description: any;
        priceDescriptionEnabled: any;
        infoPricingText: any;
        priceStructure: any;
    } | undefined;
}
export {};
