import { FabrixModel as Model } from '@fabrix/fabrix/dist/common';
import { SequelizeResolver } from '@fabrix/spool-sequelize';
export declare class CustomerResolver extends SequelizeResolver {
    findByIdDefault(id: any, options?: {}): any;
    findByTokenDefault(token: any, options?: {}): any;
    findAndCountDefault(options?: {}): any;
    resolveByInstance(cart: any, options?: {
        [key: string]: any;
    }): Promise<any>;
    resolveById(cart: any, options?: {
        [key: string]: any;
    }): any;
    resolveByToken(cart: any, options?: {
        [key: string]: any;
    }): any;
    resolveByEmail(cart: any, options?: {
        [key: string]: any;
    }): any;
    resolveByNumber(cart: any, options?: {
        [key: string]: any;
    }): any;
    resolveByString(cart: any, options?: {
        [key: string]: any;
    }): any;
    resolve(customer: any, options?: {
        [key: string]: any;
    }): any;
}
export declare class Customer extends Model {
    static readonly resolver: typeof CustomerResolver;
    static config(app: any, Sequelize: any): {
        options: {
            underscored: boolean;
            enums: {
                CUSTOMER_STATE: {
                    DISABLED: string;
                    INVITED: string;
                    ENABLED: string;
                    DECLINED: string;
                };
            };
            scopes: {
                live: {
                    where: {
                        live_mode: boolean;
                    };
                };
            };
            hooks: {
                beforeCreate: ((customer: any, options: any) => void)[];
                beforeUpdate: ((customer: any, options: any) => void)[];
                afterCreate: ((customer: any, options: any) => any)[];
                afterUpdate: ((customer: any, options: any) => any)[];
            };
            getterMethods: {
                full_name: () => string;
            };
        };
    };
    static schema(app: any, Sequelize: any): {
        token: {
            type: any;
            unique: boolean;
        };
        accepts_marketing: {
            type: any;
            defaultValue: boolean;
        };
        first_name: {
            type: any;
        };
        last_name: {
            type: any;
        };
        company: {
            type: any;
        };
        phone: {
            type: any;
        };
        email: {
            type: any;
            validate: {
                isEmail: boolean;
            };
            set: (val: any) => any;
        };
        note: {
            type: any;
        };
        last_order_id: {
            type: any;
        };
        last_order_name: {
            type: any;
        };
        state: {
            type: any;
            values: string[];
            defaultValue: string;
        };
        type: {
            type: any;
            defaultValue: string;
        };
        tax_exempt: {
            type: any;
            defaultValue: boolean;
        };
        total_spent: {
            type: any;
            defaultValue: number;
        };
        avg_spent: {
            type: any;
            defaultValue: number;
        };
        currency: {
            type: any;
            defaultValue: any;
        };
        total_orders: {
            type: any;
            defaultValue: number;
        };
        account_balance: {
            type: any;
            defaultValue: number;
        };
        verified_email: {
            type: any;
            defaultValue: boolean;
        };
        default_address_id: {
            type: any;
        };
        shipping_address_id: {
            type: any;
        };
        billing_address_id: {
            type: any;
        };
        ip: {
            type: any;
        };
        create_ip: {
            type: any;
        };
        update_ip: {
            type: any;
        };
        live_mode: {
            type: any;
            defaultValue: any;
        };
    };
    static associate(models: any): void;
}
export interface Customer {
    getProductHistory(product: any, options: any): any;
    hasPurchaseHistory(productId: any, options: any): any;
    isSubscribed(productId: any, options: any): any;
    getSalutation(options: any): any;
    getDefaultSource(options: any): any;
    setLastOrder(order: any): any;
    setTotalSpent(orderTotalDue: any): any;
    setTotalOrders(): any;
    setAvgSpent(): any;
    setAccountBalance(newBalance: any): any;
    logAccountBalance(type: any, price: any, currency: any, accountId: any, orderId: any, options: any): any;
    notifyUsers(preNotification: any, options: any): any;
    resolveCollections(options: any): any;
    resolveDiscounts(options: any): any;
    resolveMetadata(options: any): any;
    resolveUsers(options: any): any;
    resolveDefaultAddress(options: any): any;
    resolveShippingAddress(options: any): any;
    resolveBillingAddress(options: any): any;
    resolvePaymentDetailsToSources(options: any): any;
    sendRetargetEmail(options: any): any;
    updateDefaultAddress(address: any, options: any): any;
    updateShippingAddress(address: any, options: any): any;
    updateBillingAddress(address: any, options: any): any;
    toJSON(): any;
}
