import { MapKeys } from "../../common";
/**
 * The different product types
 */
export declare type ProductType = "subscription" | "additionalprofile" | "dnakit" | "dnareport" | "bundle" | "labtest";
/**
 * The different product providers
 */
export declare type ProductProvider = "selfdecode" | "lta";
/**
 * The different report types
 */
export declare type ReportType = "any" | "cardio" | "inflammation" | "introductory" | "sleep" | "vitamins" | "mood" | "minerals" | "fitness" | "apoe";
export interface APISubscriptionSettings {
    subscription: string;
    free_profiles: number;
    maintenance_fee: number;
    whitelabel_maintenance_fee: number;
    default_reports: string[];
}
export interface StoreSubscriptionSettings {
    subscription: string;
    freeProfiles: number;
    maintenanceFee: number;
    whitelabelMaintenanceFee: number;
    defaultReports: string[];
}
export declare type APIBaseProduct = {
    id?: string;
    name: string;
    slug: string;
    price: number;
    price_old: number;
    member_price: number;
    is_active: boolean;
    provider: ProductProvider;
};
/**
 * The Product interface for the API server.
 */
export declare type APIProduct = APIBaseProduct & {
    product_type: ProductType;
    report_type?: ReportType;
    interval?: number;
    is_gift?: boolean;
    subscription_settings?: APISubscriptionSettings | null;
    products?: Omit<APIProduct, "product_type">[];
};
export declare type APISubscriptionProduct = APIBaseProduct & {
    product_type: "subscription";
    is_gift: boolean;
    interval: number;
    subscription_settings: APISubscriptionSettings | null;
};
export declare type APIInternalBundleProducts = Omit<APIProduct, "product_type">;
export declare type APIBundleProduct = APIBaseProduct & {
    product_type: "bundle";
    products: APIInternalBundleProducts[];
};
export declare type APIDNAReportProduct = APIBaseProduct & {
    product_type: "dnareport";
    is_v2: boolean;
    report_type: ReportType;
};
declare type BaseNameChanges = {
    price_old: "priceOld";
    member_price: "memberPrice";
    is_active: "isActive";
    product_type: "productType";
};
export declare type StoreBaseProduct = MapKeys<APIBaseProduct, BaseNameChanges>;
/**
 * The Product interface for the Redux store.
 */
export declare type StoreProduct = MapKeys<APIProduct, BaseNameChanges & {
    report_type: "reportType";
    is_gift: "isGift";
    subscription_settings: "subscriptionSettings";
}, {
    products?: Omit<StoreProduct, "productType">[];
    subscriptionSettings?: StoreSubscriptionSettings | null;
}>;
export declare type StoreSubscriptionProduct = MapKeys<APISubscriptionProduct, BaseNameChanges & {
    is_gift: "isGift";
    subscription_settings: "subscriptionSettings";
}, {
    subscriptionSettings: StoreSubscriptionSettings | null;
}>;
export declare type StoreInternalBundleProducts = Omit<StoreProduct, "productType">;
export declare type StoreBundleProduct = MapKeys<APIBundleProduct, BaseNameChanges, {
    products: StoreInternalBundleProducts[];
}>;
export declare type StoreDNAReportProduct = MapKeys<APIDNAReportProduct, BaseNameChanges & {
    is_v2: "isV2";
    report_type: "reportType";
}>;
export {};
