import { Resource } from "../../common";
import { APIProduct, ProductProvider, ProductType, StoreProduct, StoreSubscriptionSettings, StoreInternalBundleProducts, APIInternalBundleProducts } from "./interfaces";
export declare class Product extends Resource {
    /**
     * The name of the product.
     */
    name: string;
    /**
     * Unique string identifier for the product.
     */
    slug: string;
    /**
     * Price to charge for the product.
     */
    price: number;
    /**
     * Old price of the product.
     */
    priceOld: number;
    /**
     * Price to charge a member for the product.
     */
    memberPrice: number;
    /**
     * Whether the product is active or not.
     */
    isActive: boolean;
    /**
     * From which provider the product comes.
     */
    provider: ProductProvider;
    /**
     * Type of the product.
     */
    productType: ProductType;
    /**
     * Report type for legacy wellness reports.
     */
    reportType?: "any" | "cardio" | "inflammation" | "introductory" | "sleep" | "vitamins" | "mood" | "minerals" | "fitness" | "apoe" | undefined;
    /**
     * Interval for subscription products.
     */
    interval?: number | undefined;
    /**
     * Whether the subscription product is a gift or not.
     */
    isGift?: boolean | undefined;
    /**
     * Settings related to a subscription.
     */
    subscriptionSettings?: StoreSubscriptionSettings | undefined;
    /**
     * The products of a bundle product
     */
    products?: Pick<import("../../common").MapKeys<APIProduct, {
        price_old: "priceOld";
        member_price: "memberPrice";
        is_active: "isActive";
        product_type: "productType";
    } & {
        report_type: "reportType";
        is_gift: "isGift";
        subscription_settings: "subscriptionSettings";
    }, {
        products?: Pick<import("../../common").MapKeys<APIProduct, {
            price_old: "priceOld";
            member_price: "memberPrice";
            is_active: "isActive";
            product_type: "productType";
        } & {
            report_type: "reportType";
            is_gift: "isGift";
            subscription_settings: "subscriptionSettings";
        }, any>, "id" | "name" | "slug" | "reportType" | "provider" | "price" | "products" | "interval" | "priceOld" | "memberPrice" | "isActive" | "isGift" | "subscriptionSettings">[] | undefined;
        subscriptionSettings?: StoreSubscriptionSettings | null | undefined;
    }>, "id" | "name" | "slug" | "reportType" | "provider" | "price" | "products" | "interval" | "priceOld" | "memberPrice" | "isActive" | "isGift" | "subscriptionSettings">[] | undefined;
    constructor(
    /**
     * The name of the product.
     */
    name: string, 
    /**
     * Unique string identifier for the product.
     */
    slug: string, 
    /**
     * Price to charge for the product.
     */
    price: number, 
    /**
     * Old price of the product.
     */
    priceOld: number, 
    /**
     * Price to charge a member for the product.
     */
    memberPrice: number, 
    /**
     * Whether the product is active or not.
     */
    isActive: boolean, 
    /**
     * From which provider the product comes.
     */
    provider: ProductProvider, 
    /**
     * Type of the product.
     */
    productType: ProductType, 
    /**
     * Report type for legacy wellness reports.
     */
    reportType?: "any" | "cardio" | "inflammation" | "introductory" | "sleep" | "vitamins" | "mood" | "minerals" | "fitness" | "apoe" | undefined, 
    /**
     * Interval for subscription products.
     */
    interval?: number | undefined, 
    /**
     * Whether the subscription product is a gift or not.
     */
    isGift?: boolean | undefined, 
    /**
     * Settings related to a subscription.
     */
    subscriptionSettings?: StoreSubscriptionSettings | undefined, 
    /**
     * The products of a bundle product
     */
    products?: Pick<import("../../common").MapKeys<APIProduct, {
        price_old: "priceOld";
        member_price: "memberPrice";
        is_active: "isActive";
        product_type: "productType";
    } & {
        report_type: "reportType";
        is_gift: "isGift";
        subscription_settings: "subscriptionSettings";
    }, {
        products?: Pick<import("../../common").MapKeys<APIProduct, {
            price_old: "priceOld";
            member_price: "memberPrice";
            is_active: "isActive";
            product_type: "productType";
        } & {
            report_type: "reportType";
            is_gift: "isGift";
            subscription_settings: "subscriptionSettings";
        }, any>, "id" | "name" | "slug" | "reportType" | "provider" | "price" | "products" | "interval" | "priceOld" | "memberPrice" | "isActive" | "isGift" | "subscriptionSettings">[] | undefined;
        subscriptionSettings?: StoreSubscriptionSettings | null | undefined;
    }>, "id" | "name" | "slug" | "reportType" | "provider" | "price" | "products" | "interval" | "priceOld" | "memberPrice" | "isActive" | "isGift" | "subscriptionSettings">[] | undefined);
    /**
     * The name of the product resource on the API server.
     */
    static get resourceName(): string;
    /**
     * The name of the service containing the product resource.
     */
    static get serviceName(): string;
    private static deserializeSubscriptionSettings;
    static deserializeProducts(data: APIInternalBundleProducts): StoreInternalBundleProducts;
    static serializeProducts(data: StoreInternalBundleProducts): APIInternalBundleProducts;
    /**
     * Convert the product into a JSON serializable object for the API server.
     */
    serializeAPI(): APIProduct;
    /**
     * Deserialize the data from the API server.
     *
     * @param data The product data from the API server.
     */
    deserializeAPI(data: APIProduct): void;
    /**
     * Serialize the product into a format for storing in the Redux store.
     */
    serializeRedux(): StoreProduct;
    /**
     * Create a product from the API server data.
     *
     * @param data Data from the api server.
     *
     * @returns The product object.
     */
    static apiFactory(data: APIProduct): Product;
    /**
     * Create a product from the Redux store data.
     *
     * @param data Data from the api server.
     *
     * @returns The product object.
     */
    static reduxFactory(data: StoreProduct): Product;
}
