import { Resource } from "../../common";
import { APICheckout, CheckoutExtra, CheckoutItem, CheckoutStatus, PaymentGateway, Provider, StoreCheckout, StoreSpecialOffer } from "./interfaces";
export declare class Checkout extends Resource {
    /**
     * The id of the user who owns the checkout
     */
    userId?: string;
    /**
     * Items in the checkout
     */
    items: Array<CheckoutItem>;
    /**
     * Extra items to charge in the checkout.
     */
    extras: Array<CheckoutExtra>;
    /**
     * The checkout's Status
     */
    status?: CheckoutStatus;
    /**
     * The checkout's Provider
     */
    provider: Provider;
    /**
     * The checkout's Payment gateway provider
     */
    paymentGateway: PaymentGateway;
    /**
     * Invoice generated for the checkout
     */
    invoice?: string;
    /**
     * Total amount for the checkout
     */
    total?: number;
    /**
     * Total price of the checkout without any discount
     */
    totalWithoutDiscount?: number;
    /**
     * Total discount applied to the checkout
     */
    totalDiscount?: number;
    /**
     * Total prorated price in case a subscription update
     */
    totalProrated?: number;
    /**
     * Total shipping cost for the checkout
     */
    totalShipping?: number;
    /**
     * Special offer applicable to the checkout
     */
    specialOffers?: Array<StoreSpecialOffer>;
    /**
     * Discount applied to the full amount of the checkout
     */
    discount?: string;
    /**
     * Subscription id for the user in the checkout
     */
    subscriptionId?: string;
    constructor(items: Array<CheckoutItem>, extras: Array<CheckoutExtra>, provider: Provider, paymentGateway: PaymentGateway, status?: CheckoutStatus, user_id?: string, invoice?: string, total?: number, totalWithoutDiscount?: number, totalDiscount?: number, totalProrated?: number, totalShipping?: number, specialOffers?: Array<StoreSpecialOffer>, discount?: string, subscriptionId?: string);
    /**
     * The name of the Checkout resource on the API server.
     */
    static get resourceName(): string;
    /**
     * The name of the service containing the checkout resource.
     */
    static get serviceName(): string;
    /**
     * Convert the checkout into a JSON serializable object for the API server.
     */
    serializeAPI(): APICheckout;
    /**
     * Deserialize the data from the API server.
     *
     * @param data The checkout data from the API server.
     */
    deserializeAPI(data: APICheckout): void;
    /**
     * Serialize the checkout into a format for storing in the Redux store.
     */
    serializeRedux(): StoreCheckout;
    /**
     * Create a checkout from the API server data.
     *
     * @param data Data from the api server.
     *
     * @returns The checkout object.
     */
    static apiFactory(data: APICheckout): Checkout;
    /**
     * Create a checkout from the Redux store data.
     *
     * @param data Data from the api server.
     *
     * @returns The checkout object.
     */
    static reduxFactory(data: StoreCheckout): Checkout;
    /**
     * Additional action to confirm the checkout.
     */
    confirm(): Promise<void>;
    /**
     * Additional action to add a discount to the checkout.
     */
    addDiscount(discountCode: string): Promise<void>;
    /**
     * Additional action to remove a discount from the checkout.
     */
    removeDiscount(discountCode: string): Promise<void>;
    /**
     * Execute additional actions in the checkout.
     */
    static action(actionName: string): Promise<Checkout>;
    /**
     * Additional action to add a special offer to the checkout.
     */
    addSpecialOffer(specialOfferId: string): Promise<void>;
    /**
     * Delete a special offer from the checkout.
     */
    deleteSpecialOffer(specialOfferId: string): Promise<void>;
    /**
     * Gets the list of checkout items that should be removed
     * according to shipping location restrictions
     *
     * @param stateName The name of the state used for creating the Order or LabOrder
     */
    getItemsToRemove(stateName: string, countryCode: string): Promise<CheckoutItem[]>;
    /**
     * Convert the given list of special offers to camel case.
     */
    private static convertSpecialOffersToCamelCase;
}
