import type { MutationOptions } from "../shared/hook-types";
import type { QueryKey } from "../shared/query-keys";
/**
 * Mutation options with full TanStack Query lifecycle support
 * Enables optimistic updates via onMutate returning context
 */
export type CheckoutMutationOptions<TData, TVariables, TContext = unknown> = MutationOptions<TData, TVariables, TContext>;
export type ShippingOptionLike = {
    id: string;
    price_type?: string | null;
    amount?: number | null;
};
export type CheckoutCartLike = {
    id: string;
    region_id?: string | null;
    shipping_methods?: {
        shipping_option_id?: string;
        data?: Record<string, unknown>;
    }[];
    payment_collection?: {
        payment_sessions?: unknown[];
    };
};
export type CheckoutShippingInputBase = {
    cartId?: string;
    enabled?: boolean;
    cacheKey?: string;
};
export type CheckoutPaymentInputBase = {
    cartId?: string;
    regionId?: string;
    enabled?: boolean;
};
export type CheckoutService<TCart, TShippingOption, TPaymentProvider, TPaymentCollection, TCompleteResult> = {
    listShippingOptions: (cartId: string, signal?: AbortSignal) => Promise<TShippingOption[]>;
    calculateShippingOption?: (optionId: string, input: {
        cart_id: string;
        data?: Record<string, unknown>;
    }, signal?: AbortSignal) => Promise<TShippingOption>;
    addShippingMethod: (cartId: string, optionId: string, data?: Record<string, unknown>) => Promise<TCart>;
    listPaymentProviders: (regionId: string, signal?: AbortSignal) => Promise<TPaymentProvider[]>;
    initiatePaymentSession: (cartId: string, providerId: string, cart?: TCart | null) => Promise<TPaymentCollection>;
    completeCart?: (cartId: string) => Promise<TCompleteResult>;
};
export type CheckoutQueryKeys = {
    all: () => QueryKey;
    shippingOptions: (cartId: string, cacheKey?: string) => QueryKey;
    shippingOptionPrice: (params: {
        cartId: string;
        optionId: string;
        data?: Record<string, unknown>;
    }) => QueryKey;
    paymentProviders: (regionId: string) => QueryKey;
};
export type UseCheckoutShippingResult<TShippingOption, TCart = unknown> = {
    shippingOptions: TShippingOption[];
    shippingPrices: Record<string, number>;
    isLoading: boolean;
    isFetching: boolean;
    isCalculating: boolean;
    setShippingMethod: (optionId: string, data?: Record<string, unknown>) => void;
    setShippingMethodAsync: (optionId: string, data?: Record<string, unknown>) => Promise<TCart>;
    isSettingShipping: boolean;
    selectedShippingMethodId?: string;
    selectedShippingMethodData?: Record<string, unknown>;
    selectedOption?: TShippingOption;
};
export type UseCheckoutPaymentResult<TPaymentProvider, TPaymentCollection = unknown> = {
    paymentProviders: TPaymentProvider[];
    initiatePayment: (providerId: string) => void;
    initiatePaymentAsync: (providerId: string) => Promise<TPaymentCollection>;
    isInitiatingPayment: boolean;
    isLoading: boolean;
    isFetching: boolean;
    canInitiatePayment: boolean;
    hasPaymentCollection: boolean;
    hasPaymentSessions: boolean;
};
//# sourceMappingURL=types.d.ts.map