/**
 * @hidden
 * Module for an app to support a checkout flow by interacting with the marketplace cart in the host.
 * @beta
 * @module
 */
/**
 * @hidden
 * the version of the current cart interface
 * which is forced to send to the host in the calls.
 * @internal
 * Limited to Microsoft-internal use
 * @beta
 */
export declare const cartVersion: CartVersion;
/**
 * @hidden
 * Represents the cart object for the app checkout flow.
 * @beta
 */
export interface Cart {
    /**
     * @hidden
     * Version of the cart.
     */
    readonly version: CartVersion;
    /**
     * @hidden
     * The uuid of the cart.
     */
    readonly id: string;
    /**
     * @hidden
     * The cart info.
     */
    readonly cartInfo: CartInfo;
    /**
     * @hidden
     * The cart items.
     */
    readonly cartItems: CartItem[];
}
/**
 * @hidden
 * Version of the cart that is used by the app.
 * @internal
 * Limited to Microsoft-internal use
 * @beta
 */
interface CartVersion {
    /**
     * @hidden
     * Represents the major version of a cart, it
     * not compatible with the previous major version.
     */
    readonly majorVersion: number;
    /**
     * @hidden
     * The minor version of a cart, which is compatible
     * with the previous minor version in the same major version.
     */
    readonly minorVersion: number;
}
/**
 * @hidden
 * Represents the cart information
 * @beta
 */
interface CartInfo {
    /**
     * @hidden
     * The country market where the products are selling.
     * Should be country code in ISO 3166-1 alpha-2 format, e.g. CA for Canada.
     * https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
     */
    readonly market: string;
    /**
     * @hidden
     * The identifier to tell the cart is checked out by admin or end user.
     */
    readonly intent: Intent;
    /**
     * @hidden
     * Locale the app should render for the user
     * Should be a BCP 47 language tag, e.g. en-US ([primary tag]-[ISO 3166-1 alpha-2 code]).
     * https://en.wikipedia.org/wiki/IETF_language_tag
     */
    readonly locale: string;
    /**
     * @hidden
     * The status of the cart.
     */
    readonly status: CartStatus;
    /**
     * @hidden
     * ISO 4217 currency code for the cart item price, e.g. USD for US Dollar.
     * https://en.wikipedia.org/wiki/ISO_4217
     */
    readonly currency: string;
    /**
     * @hidden
     * ISO 8601 timestamp string in UTC, indicates when the cart is created.
     * e.g. 2023-06-19T22:06:59Z
     * https://en.wikipedia.org/wiki/ISO_8601
     */
    readonly createdAt: string;
    /**
     * @hidden
     * ISO 8601 timestamp string in UTC, indicates when the cart is updated.
     * e.g. 2023-06-19T22:06:59Z
     * https://en.wikipedia.org/wiki/ISO_8601
     */
    readonly updatedAt: string;
}
/**
 * @hidden
 * Represents the basic cart item information.
 * @beta
 */
export interface Item {
    /**
     * @hidden
     * The id of the cart item.
     */
    readonly id: string;
    /**
     * @hidden
     * The display name of the cart item.
     */
    readonly name: string;
    /**
     * @hidden
     * The quantity of the cart item.
     */
    readonly quantity: number;
    /**
     * @hidden
     * The price of the single cart item.
     */
    readonly price: number;
    /**
     * @hidden
     * The thumbnail imageURL of the cart item.
     */
    readonly imageURL?: URL;
}
/**
 * @hidden
 * Represents the cart item that could have accessories
 * @beta
 */
export interface CartItem extends Item {
    /**
     * @hidden
     * Accessories to the item if existing.
     */
    readonly accessories?: Item[];
    /**
     * @hidden
     * The thumbnail imageURL of the cart item.
     */
    readonly imageURL?: URL;
}
/**
 * @hidden
 * Represents the persona creating the cart.
 * @beta
 */
export declare enum Intent {
    /**
     * @hidden
     * The cart is created by admin of an organization in Teams Admin Center.
     */
    TACAdminUser = "TACAdminUser",
    /**
     * @hidden
     * The cart is created by admin of an organization in Teams.
     */
    TeamsAdminUser = "TeamsAdminUser",
    /**
     * @hidden
     * The cart is created by end user of an organization in Teams.
     */
    TeamsEndUser = "TeamsEndUser"
}
/**
 * @hidden
 * Represents the status of the cart.
 * @beta
 */
export declare enum CartStatus {
    /**
     * @hidden
     * Cart is created but not checked out yet.
     */
    Open = "Open",
    /**
     * @hidden
     * Cart is checked out but not completed yet.
     */
    Processing = "Processing",
    /**
     * @hidden
     * Indicate checking out is completed and the host should
     * return a new cart in the next getCart call.
     */
    Processed = "Processed",
    /**
     * @hidden
     * Indicate checking out process is manually cancelled by the user
     */
    Closed = "Closed",
    /**
     * @hidden
     * Indicate checking out is failed and the host should
     * return a new cart in the next getCart call.
     */
    Error = "Error"
}
/**
 * @hidden
 * Represents the parameters to update the cart items.
 * @beta
 */
export interface AddOrUpdateCartItemsParams {
    /**
     * @hidden
     * The uuid of the cart to be updated, target on the cart
     * being checked out  if cartId is not provided.
     */
    cartId?: string;
    /**
     * @hidden
     * A list of cart items object, for each item,
     * if item id exists in the cart, overwrite the item price and quantity,
     * otherwise add new items to cart.
     */
    cartItems: CartItem[];
}
/**
 * @hidden
 * Represents the parameters to remove the cart items.
 * @beta
 */
export interface RemoveCartItemsParams {
    /**
     * @hidden
     * The uuid of the cart to be updated, target on the cart
     * being checked out if cartId is not provided.
     */
    cartId?: string;
    /**
     * @hidden
     * A list of cart id, delete the cart item accordingly.
     */
    cartItemIds: string[];
}
/**
 * @hidden
 * Represents the parameters to update the cart status.
 * @beta
 */
export interface UpdateCartStatusParams {
    /**
     * @hidden
     * The uuid of the cart to be updated, target on the cart
     * being checked out if cartId is not provided.
     */
    cartId?: string;
    /**
     * @hidden
     * Status of the cart.
     */
    cartStatus: CartStatus;
    /**
     * @hidden
     * Extra info to the status.
     */
    statusInfo?: string;
}
/**
 * @hidden
 * Get the cart object owned by the host to checkout.
 * @returns A promise of the cart object in the cartVersion.
 * @beta
 */
export declare function getCart(): Promise<Cart>;
/**
 * @hidden
 * Add or update cart items in the cart owned by the host.
 * @param addOrUpdateCartItemsParams Represents the parameters to update the cart items.
 * @returns A promise of the updated cart object in the cartVersion.
 * @beta
 */
export declare function addOrUpdateCartItems(addOrUpdateCartItemsParams: AddOrUpdateCartItemsParams): Promise<Cart>;
/**
 * @hidden
 * Remove cart items from the cart owned by the host.
 * @param removeCartItemsParams The parameters to remove the cart items.
 * @returns A promise of the updated cart object in the cartVersion.
 * @beta
 */
export declare function removeCartItems(removeCartItemsParams: RemoveCartItemsParams): Promise<Cart>;
/**
 * @hidden
 * Update cart status in the cart owned by the host.
 * @param updateCartStatusParams The parameters to update the cart status.
 * @returns A promise of the updated cart object in the cartVersion.
 * @beta
 */
export declare function updateCartStatus(updateCartStatusParams: UpdateCartStatusParams): Promise<Cart>;
/**
 * @hidden
 * Checks if the marketplace capability is supported by the host.
 * @returns Boolean to represent whether the marketplace capability is supported.
 * @throws Error if {@linkcode app.initialize} has not successfully completed.
 * @beta
 */
export declare function isSupported(): boolean;
export {};
