import { Image, Images } from './image.model';
import { User } from './misc.model';
export interface VariantOptionQualifier {
    image?: Image;
    name?: string;
    qualifier?: VariantQualifier;
    value?: string;
}
export interface PromotionRestriction {
    description?: string;
    restrictionType?: string;
}
export interface FeatureUnit {
    name?: string;
    symbol?: string;
    unitType?: string;
}
export interface FeatureValue {
    value?: string;
}
export interface Feature {
    code?: string;
    comparable?: boolean;
    description?: string;
    featureUnit?: FeatureUnit;
    featureValues?: FeatureValue[];
    name?: string;
    range?: boolean;
    type?: string;
}
export interface VariantCategory {
    hasImage?: boolean;
    name?: string;
    priority?: number;
}
export interface VariantValueCategory {
    name?: string;
    sequence?: number;
    superCategories?: VariantCategory[];
}
export declare enum VariantType {
    SIZE = "ApparelSizeVariantProduct",
    STYLE = "ApparelStyleVariantProduct",
    COLOR = "ElectronicsColorVariantProduct"
}
export declare enum PriceType {
    BUY = "BUY",
    FROM = "FROM"
}
export interface Price {
    currencyIso?: string;
    formattedValue?: string;
    maxQuantity?: number;
    minQuantity?: number;
    priceType?: PriceType;
    value?: number;
}
export interface Stock {
    stockLevel?: number;
    stockLevelStatus?: string;
}
export interface VariantOption {
    code?: string;
    priceData?: Price;
    stock?: Stock;
    url?: string;
    variantOptionQualifiers?: VariantOptionQualifier[];
}
export interface Promotion {
    code?: string;
    couldFireMessages?: string[];
    description?: string;
    enabled?: boolean;
    endDate?: Date;
    firedMessages?: string[];
    priority?: number;
    productBanner?: Image;
    promotionGroup?: string;
    promotionType?: string;
    restrictions?: PromotionRestriction[];
    startDate?: Date;
    title?: string;
}
export interface Category {
    code?: string;
    name?: string;
    image?: Image;
    url?: string;
}
export interface Classification {
    code?: string;
    features?: Feature[];
    name?: string;
}
export interface FutureStock {
    date?: Date;
    formattedDate?: string;
    stock?: Stock;
}
export interface PriceRange {
    maxPrice?: Price;
    minPrice?: Price;
}
export interface ProductReference {
    description?: string;
    preselected?: boolean;
    quantity?: number;
    referenceType?: string;
    target?: Product;
}
export interface Review {
    alias?: string;
    comment?: string;
    date?: Date;
    headline?: string;
    id?: string;
    principal?: User;
    rating?: number;
}
export interface VariantMatrixElement {
    elements?: VariantMatrixElement[];
    isLeaf?: boolean;
    parentVariantCategory?: VariantCategory;
    variantOption?: VariantOption;
    variantValueCategory?: VariantValueCategory;
}
export interface ProductReferences {
    [referenceType: string]: ProductReference[];
}
export interface BaseOption {
    options?: VariantOption[];
    selected?: VariantOption;
    variantType?: VariantType;
}
export interface Product {
    availableForPickup?: boolean;
    averageRating?: number;
    baseOptions?: BaseOption[];
    baseProduct?: string;
    categories?: Category[];
    classifications?: Classification[];
    code?: string;
    description?: string;
    futureStocks?: FutureStock[];
    images?: Images;
    manufacturer?: string;
    multidimensional?: boolean;
    name?: string;
    /**
     * The product slug is used to create pretty URL for links to product detail pages.
     *
     * The slug typically avoid spaces (`%20`) or other characters that are encoded in the URL.
     */
    slug?: string;
    nameHtml?: string;
    numberOfReviews?: number;
    potentialPromotions?: Promotion[];
    price?: Price;
    priceRange?: PriceRange;
    productReferences?: ProductReferences;
    purchasable?: boolean;
    reviews?: Review[];
    stock?: Stock;
    summary?: string;
    url?: string;
    variantMatrix?: VariantMatrixElement[];
    variantOptions?: VariantOption[];
    variantType?: VariantType;
    volumePrices?: Price[];
    volumePricesFlag?: boolean;
}
export declare enum VariantQualifier {
    SIZE = "size",
    STYLE = "style",
    COLOR = "color",
    THUMBNAIL = "thumbnail",
    PRODUCT = "product",
    ROLLUP_PROPERTY = "rollupProperty"
}
