import type { ExtensionPointsType } from '../../typings';
import type { CartItem, Attachment, Totalizer, ClientProfileData, GiftCard } from './cart';
import type { ProductSku } from './pdp';
export * from './cart';
export type UseExtension = {
    account: string;
    extensionPoint: ExtensionPointsType;
};
export type UseCartAddItemData = {
    id: string;
    quantity: number;
    seller: string;
    attachments?: Attachment[];
};
export type UseCart = {
    orderFormId: string | undefined;
    value: number;
    items: CartItem[];
    totalizers: Totalizer[];
    clientProfileData?: ClientProfileData;
    giftCards: GiftCard[];
    addItem: (data: UseCartAddItemData) => Promise<void>;
    removeItem: (id: string, index: number) => Promise<void>;
    addCoupon: (coupon: string) => Promise<void>;
    /**
     * Syncs the cart with the latest data from the Order Form.
     * This is useful to ensure that the cart reflects any changes made outside Sales App.
     */
    addGiftCard: (redemptionCodeOrGiftCard: string | GiftCard, provider?: string) => Promise<void>;
    sync: () => Promise<void>;
};
export type UseCartItemChangeItemData = {
    quantity?: number;
    attachments?: Attachment[];
};
export type UseCartItem = {
    item: CartItem | undefined;
    itemIndex: number | undefined;
    changeItem: (data: UseCartItemChangeItemData) => Promise<void>;
    /** To use this function, the feature of `manual price` must be active.
     * To check if it's active, use the Get orderForm configuration endpoint.
     * To make it active, use the Update orderForm configuration endpoint, making the `allowManualPrice` field true.
     */
    changePrice: (price: number) => Promise<void>;
};
export type UsePDP = {
    productSku?: ProductSku | null;
};
export type UseCurrentUser = {
    name: string;
    email: string;
};
export type ExtensionPointApi = {
    useExtension: () => UseExtension;
    useCart?: () => UseCart;
    useCartItem?: () => UseCartItem;
    usePDP?: () => UsePDP;
    useCurrentUser?: () => UseCurrentUser;
};
