import { type CacheConfig, type CacheStrategy } from "../shared/cache-config";
import type { MutationOptions, ReadQueryOptions, SuspenseQueryOptions } from "../shared/hook-types";
import { type PrefetchSkipMode } from "../shared/prefetch";
import type { QueryNamespace } from "../shared/query-keys";
import type { StorageValueStore } from "../shared/storage-value-store";
import type { AddLineItemInputBase, CartAddressAdapter, CartAddressInputBase, CartCreateInputBase, CartInputBase, CartLike, CartQueryKeys, CartService, RemoveLineItemInputBase, TransferCartInputBase, UpdateCartInputBase, UpdateLineItemInputBase, UseCartResult, UseSuspenseCartResult } from "./types";
type CartTransientInput = {
    cartId?: string;
    autoCreate?: boolean;
    autoUpdateRegion?: boolean;
    enabled?: boolean;
    variantId?: string;
    quantity?: number;
    useSameAddress?: boolean;
    shippingAddress?: unknown;
    billingAddress?: unknown;
    salesChannelId?: string;
};
type CartCreateTransientInput = CartTransientInput;
type CartUpdateTransientInput = CartTransientInput;
type AddLineItemTransientInput = {
    cartId?: string;
    autoCreate?: boolean;
    autoUpdateRegion?: boolean;
    enabled?: boolean;
    region_id?: string;
    country_code?: string;
    salesChannelId?: string;
};
type UpdateLineItemTransientInput = {
    cartId?: string;
    lineItemId?: string;
    enabled?: boolean;
    autoCreate?: boolean;
    autoUpdateRegion?: boolean;
};
declare const cartPayloadOmitKeys: readonly ["cartId", "autoCreate", "autoUpdateRegion", "enabled", "variantId", "quantity", "useSameAddress", "shippingAddress", "billingAddress", "salesChannelId"];
declare const addLineItemPayloadOmitKeys: readonly ["cartId", "autoCreate", "autoUpdateRegion", "enabled", "region_id", "country_code", "salesChannelId"];
declare const updateLineItemPayloadOmitKeys: readonly ["cartId", "lineItemId", "enabled", "autoCreate", "autoUpdateRegion"];
type NormalizedCartCreatePayload<TInput extends CartCreateInputBase> = Omit<TInput & CartCreateTransientInput, (typeof cartPayloadOmitKeys)[number]> & {
    sales_channel_id?: string;
};
type NormalizedCartUpdatePayload<TInput extends UpdateCartInputBase> = Omit<TInput & CartUpdateTransientInput, (typeof cartPayloadOmitKeys)[number]> & {
    sales_channel_id?: string;
};
type NormalizedAddLineItemPayload<TInput extends AddLineItemInputBase> = Omit<TInput & AddLineItemTransientInput, (typeof addLineItemPayloadOmitKeys)[number]>;
type NormalizedUpdateLineItemPayload<TInput extends UpdateLineItemInputBase> = Omit<TInput & UpdateLineItemTransientInput, (typeof updateLineItemPayloadOmitKeys)[number]>;
type BuildCreateParamsOption<TCreateInput extends CartCreateInputBase, TCreateParams> = [NormalizedCartCreatePayload<TCreateInput>] extends [TCreateParams] ? {
    buildCreateParams?: (input: TCreateInput) => TCreateParams;
} : {
    buildCreateParams: (input: TCreateInput) => TCreateParams;
};
type BuildUpdateParamsOption<TUpdateInput extends UpdateCartInputBase, TUpdateParams> = [NormalizedCartUpdatePayload<TUpdateInput>] extends [TUpdateParams] ? {
    buildUpdateParams?: (input: TUpdateInput) => TUpdateParams;
} : {
    buildUpdateParams: (input: TUpdateInput) => TUpdateParams;
};
type BuildAddParamsOption<TAddInput extends AddLineItemInputBase, TAddParams> = [NormalizedAddLineItemPayload<TAddInput>] extends [TAddParams] ? {
    buildAddParams?: (input: TAddInput) => TAddParams;
} : {
    buildAddParams: (input: TAddInput) => TAddParams;
};
type BuildCreateInputFromAddInputOption<TAddInput extends AddLineItemInputBase, TCreateInput extends CartCreateInputBase> = [TAddInput] extends [TCreateInput] ? {
    buildCreateInputFromAddInput?: (input: TAddInput) => TCreateInput;
} : {
    buildCreateInputFromAddInput: (input: TAddInput) => TCreateInput;
};
type BuildUpdateItemParamsOption<TUpdateItemInput extends UpdateLineItemInputBase, TUpdateItemParams> = [NormalizedUpdateLineItemPayload<TUpdateItemInput>] extends [
    TUpdateItemParams
] ? {
    buildUpdateItemParams?: (input: TUpdateItemInput) => TUpdateItemParams;
} : {
    buildUpdateItemParams: (input: TUpdateItemInput) => TUpdateItemParams;
};
type CreateCartHooksBaseConfig<TCart extends CartLike, TCreateParams, TUpdateParams, TAddParams, TUpdateItemParams, TCompleteResult, TAddressInput, TAddressPayload> = {
    service: CartService<TCart, TCreateParams, TUpdateParams, TAddParams, TUpdateItemParams, TCompleteResult>;
    queryKeys?: CartQueryKeys;
    queryKeyNamespace?: QueryNamespace;
    cacheConfig?: CacheConfig;
    requireRegion?: boolean;
    cartStorage?: StorageValueStore;
    isNotFoundError?: (error: unknown) => boolean;
    addressAdapter?: CartAddressAdapter<TAddressInput, TAddressPayload>;
    invalidateOnSuccess?: boolean;
};
export type CreateCartHooksConfig<TCart extends CartLike, TCreateInput extends CartCreateInputBase, TCreateParams, TUpdateInput extends UpdateCartInputBase, TUpdateParams, TAddInput extends AddLineItemInputBase, TAddParams, TUpdateItemInput extends UpdateLineItemInputBase, TUpdateItemParams, TCompleteResult, TAddressInput, TAddressPayload> = CreateCartHooksBaseConfig<TCart, TCreateParams, TUpdateParams, TAddParams, TUpdateItemParams, TCompleteResult, TAddressInput, TAddressPayload> & BuildCreateParamsOption<TCreateInput, TCreateParams> & BuildUpdateParamsOption<TUpdateInput, TUpdateParams> & BuildAddParamsOption<TAddInput, TAddParams> & BuildCreateInputFromAddInputOption<TAddInput, TCreateInput> & BuildUpdateItemParamsOption<TUpdateItemInput, TUpdateItemParams>;
export type CartMutationOptions<TData, TVariables, TContext = unknown> = MutationOptions<TData, TVariables, TContext>;
export declare function createCartHooks<TCart extends CartLike, TCreateInput extends CartCreateInputBase, TCreateParams = NormalizedCartCreatePayload<TCreateInput>, TUpdateInput extends UpdateCartInputBase = UpdateCartInputBase, TUpdateParams = NormalizedCartUpdatePayload<TUpdateInput>, TAddInput extends AddLineItemInputBase = AddLineItemInputBase, TAddParams = NormalizedAddLineItemPayload<TAddInput>, TUpdateItemInput extends UpdateLineItemInputBase = UpdateLineItemInputBase, TUpdateItemParams = NormalizedUpdateLineItemPayload<TUpdateItemInput>, TCompleteResult = unknown, TAddressInput = Record<string, unknown>, TAddressPayload = Record<string, unknown>>({ service, buildCreateParams, buildUpdateParams, buildAddParams, buildCreateInputFromAddInput, buildUpdateItemParams, queryKeys, queryKeyNamespace, cacheConfig, requireRegion, cartStorage, isNotFoundError, addressAdapter, invalidateOnSuccess, }: CreateCartHooksConfig<TCart, TCreateInput, TCreateParams, TUpdateInput, TUpdateParams, TAddInput, TAddParams, TUpdateItemInput, TUpdateItemParams, TCompleteResult, TAddressInput, TAddressPayload>): {
    useCart: (input: CartInputBase, options?: {
        queryOptions?: ReadQueryOptions<TCart | null>;
    }) => UseCartResult<TCart>;
    useSuspenseCart: (input: CartInputBase, options?: {
        queryOptions?: SuspenseQueryOptions<TCart | null>;
    }) => UseSuspenseCartResult<TCart>;
    useCreateCart: (options?: CartMutationOptions<TCart, TCreateInput>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, TCreateInput, unknown>;
    useUpdateCart: (options?: CartMutationOptions<TCart, TUpdateInput>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, TUpdateInput, unknown>;
    useUpdateCartAddress: (options?: CartMutationOptions<TCart, CartAddressInputBase<TAddressInput>>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, CartAddressInputBase<TAddressInput>, unknown>;
    useAddLineItem: (options?: CartMutationOptions<TCart, TAddInput>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, TAddInput, unknown>;
    useUpdateLineItem: (options?: CartMutationOptions<TCart, TUpdateItemInput>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, TUpdateItemInput, unknown>;
    useRemoveLineItem: (options?: CartMutationOptions<TCart, RemoveLineItemInputBase>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, RemoveLineItemInputBase, unknown>;
    useTransferCart: (options?: CartMutationOptions<TCart, TransferCartInputBase>) => import("@tanstack/react-query").UseMutationResult<TCart, Error, TransferCartInputBase, unknown>;
    useCompleteCart: (options?: CartMutationOptions<TCompleteResult, {
        cartId?: string;
    }> & {
        clearCartOnSuccess?: boolean;
    }) => import("@tanstack/react-query").UseMutationResult<TCompleteResult, Error, {
        cartId?: string;
    }, unknown>;
    usePrefetchCart: (options?: {
        cacheStrategy?: CacheStrategy;
        skipIfCached?: boolean;
        skipMode?: PrefetchSkipMode;
    }) => {
        prefetchCart: (input: CartInputBase) => Promise<void>;
    };
};
export type CartHooks<TCart extends CartLike, TCreateInput extends CartCreateInputBase, TCreateParams = NormalizedCartCreatePayload<TCreateInput>, TUpdateInput extends UpdateCartInputBase = UpdateCartInputBase, TUpdateParams = NormalizedCartUpdatePayload<TUpdateInput>, TAddInput extends AddLineItemInputBase = AddLineItemInputBase, TAddParams = NormalizedAddLineItemPayload<TAddInput>, TUpdateItemInput extends UpdateLineItemInputBase = UpdateLineItemInputBase, TUpdateItemParams = NormalizedUpdateLineItemPayload<TUpdateItemInput>, TCompleteResult = unknown, TAddressInput = Record<string, unknown>, TAddressPayload = Record<string, unknown>> = ReturnType<typeof createCartHooks<TCart, TCreateInput, TCreateParams, TUpdateInput, TUpdateParams, TAddInput, TAddParams, TUpdateItemInput, TUpdateItemParams, TCompleteResult, TAddressInput, TAddressPayload>>;
export {};
//# sourceMappingURL=hooks.d.ts.map