import { FabrixModel as Model } from '@fabrix/fabrix/dist/common';
import { SequelizeResolver } from '@fabrix/spool-sequelize';
export declare class ProductResolver extends SequelizeResolver {
    findByIdDefault(criteria: any, options?: {
        [key: string]: any;
    }): any;
    findByHandleDefault(handle: any, options?: {
        [key: string]: any;
    }): any;
    findOneDefault(options?: {
        [key: string]: any;
    }): any;
    findAllDefault(options?: {}): any;
    findAndCountDefault(options: any): any;
    resolveByInstance(product: any, options?: {
        [key: string]: any;
    }): Promise<any>;
    resolveById(product: any, options?: {
        [key: string]: any;
    }): any;
    resolveByToken(product: any, options?: {
        [key: string]: any;
    }): any;
    resolveByhandle(product: any, options?: {
        [key: string]: any;
    }): any;
    resolveByNumber(product: any, options?: {
        [key: string]: any;
    }): any;
    resolveByString(product: any, options?: {
        [key: string]: any;
    }): any;
    resolve(product: any, options?: {
        [key: string]: any;
    }): any;
}
export declare class Product extends Model {
    static readonly resolver: typeof ProductResolver;
    static config(app: any, Sequelize: any): {
        options: {
            enums: {
                UNITS: {
                    G: string;
                    KG: string;
                    OZ: string;
                    LB: string;
                };
                PRODUCT_DEFAULTS: {
                    HOST: string;
                    TAX_CODE: string;
                    PRICE: number;
                    CALCULATED_PRICE: number;
                    DISCOUNTED_LINES: any[];
                    TOTAL_DISCOUNTS: number;
                    CURRENCY: string;
                    PUBLISHED_SCOPE: string;
                    PUBLISHED: boolean;
                    AVAILABLE: boolean;
                    OPTIONS: any[];
                    WEIGHT: number;
                    WEIGHT_UNIT: string;
                    REVIEWS_SCORE: number;
                    TOTAL_REVIEWS: number;
                    TOTAL_VARIANTS: number;
                };
            };
            underscored: boolean;
            scopes: {
                live: {
                    where: {
                        live_mode: boolean;
                    };
                };
                published: {
                    where: {
                        published: boolean;
                    };
                };
            };
            hooks: {
                beforeValidate: ((product: any, options: any) => void)[];
                beforeCreate: ((product: any, options: any) => any)[];
                beforeUpdate: ((product: any, options: any) => any)[];
            };
        };
    };
    static schema(app: any, Sequelize: any): {
        host: {
            type: any;
            defaultValue: string;
        };
        handle: {
            type: any;
            allowNull: boolean;
            unique: boolean;
            set: (val: any) => void;
        };
        title: {
            type: any;
            set: (val: any) => void;
        };
        body: {
            type: any;
        };
        html: {
            type: any;
        };
        seo_title: {
            type: any;
            set: (val: any) => void;
        };
        seo_description: {
            type: any;
            set: (val: any) => void;
        };
        type: {
            type: any;
            allowNull: boolean;
            set: (val: any) => void;
        };
        tax_code: {
            type: any;
            defaultValue: string;
        };
        compare_at_price: {
            type: any;
            defaultValue: number;
        };
        price: {
            type: any;
            defaultValue: number;
        };
        calculated_price: {
            type: any;
            defaultValue: number;
        };
        currency: {
            type: any;
            defaultValue: string;
        };
        total_orders: {
            type: any;
            defaultValue: number;
        };
        discounted_lines: {
            type: any;
            defaultValue: any[];
        };
        total_discounts: {
            type: any;
            defaultValue: number;
        };
        published_scope: {
            type: any;
            defaultValue: string;
        };
        published: {
            type: any;
            defaultValue: boolean;
        };
        published_at: {
            type: any;
        };
        unpublished_at: {
            type: any;
        };
        available: {
            type: any;
            defaultValue: boolean;
        };
        options: {
            type: any;
            defaultValue: any[];
        };
        property_pricing: {
            type: any;
            defaultValue: {};
        };
        weight: {
            type: any;
            defaultValue: number;
        };
        weight_unit: {
            type: any;
            values: string[];
            defaultValue: string;
        };
        review_score: {
            type: any;
            defaultValue: number;
        };
        total_reviews: {
            type: any;
            defaultValue: number;
        };
        total_variants: {
            type: any;
            defaultValue: number;
        };
        average_shipping: {
            type: any;
            defaultValue: number;
        };
        exclude_payment_types: {
            type: any;
            defaultValue: any[];
        };
        google: {
            type: any;
            defaultValue: {};
        };
        amazon: {
            type: any;
            defaultValue: {};
        };
        live_mode: {
            type: any;
            defaultValue: any;
        };
    };
    static associate(models: any): void;
}
export interface Product {
    setItemDiscountedLines(discounts: any, criteria: any, options: any): any;
    setDiscountedLines(lines: any): any;
    setCalculatedPrice(calculatedPrice: any): any;
    setTotals(): any;
    getCustomerHistory(customer: any, options: any): any;
    hasPurchaseHistory(customerId: any, options: any): any;
    isSubscribed(customerId: any, options: any): any;
    getCollectionPairs(options: any): any;
    calculateDiscounts(options: any): any;
    calculate(options: any): any;
    mergeIntoCollections(colsB: any): any;
    toJSON(): any;
    resolveVariants(options: any): any;
    getDefaultVariant(options: any): any;
    resolveAssociations(options: any): any;
    resolveImages(options: any): any;
    resolveVendors(options: any): any;
    resolveMetadata(options: any): any;
    resolveShops(options: any): any;
    resolveTags(options: any): any;
    resolveCollections(options: any): any;
    resolveCoupons(options: any): any;
    resolveDiscounts(options: any): any;
}
