import type { UseMutationResult } from "@tanstack/react-query";
import type { CartQueryKeys } from "../cart/types";
import { type CacheConfig, type CacheStrategy } from "../shared/cache-config";
import { type ActiveCartQueryKeyMatcher } from "../shared/cart-cache-sync";
import type { QueryResult } from "../shared/hook-result-types";
import type { QueryFactoryOptions, 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 { AddFavoriteProductListItemInput, AddProductListItemInput, ChangeProductListItemQuantityInput, CreateCustomProductListInput, CreateFavoriteProductListInput, CreateProductListCartInput, DeleteProductListInput, DeleteProductListItemInput, IncrementProductListItemInput, ProductListCartLike, ProductListDeleteResponse, ProductListDetailInputBase, ProductListListInputBase, ProductListListResult, ProductListMutationOptions, ProductListQueryKeys, ProductListService, UpdateProductListInput, UpdateProductListItemInput, UseProductListResult, UseProductListsResult, UseSuspenseProductListResult, UseSuspenseProductListsResult } from "./types";
type SuspenseListInput<TInput extends ProductListListInputBase> = Omit<TInput, "enabled">;
type SuspenseDetailInput<TInput extends ProductListDetailInputBase> = Omit<TInput, "enabled" | "id"> & {
    id: NonNullable<TInput["id"]>;
};
export type ProductListPrefetchHookOptions = {
    cacheStrategy?: CacheStrategy;
    defaultDelay?: number;
    skipIfCached?: boolean;
    skipMode?: PrefetchSkipMode;
};
export type ProductListPrefetchOptions = {
    cacheStrategy?: CacheStrategy;
    prefetchedBy?: string;
    skipIfCached?: boolean;
    skipMode?: PrefetchSkipMode;
};
export type CreateProductListHooksConfig<TProductList, TProductListItem, TCart extends ProductListCartLike, TListInput extends ProductListListInputBase, TListParams, TDetailInput extends ProductListDetailInputBase, TDetailParams, TListKeyParams = TListParams & {
    customerId?: string | null;
}, TDetailKeyParams = TDetailParams & {
    customerId?: string | null;
}> = {
    service: ProductListService<TProductList, TProductListItem, TCart, TListParams, TDetailParams>;
    buildListParams?: (input: TListInput) => TListParams;
    buildDetailParams?: (input: TDetailInput) => TDetailParams;
    buildListKeyParams?: (input: TListInput, params: TListParams) => TListKeyParams;
    buildDetailKeyParams?: (input: TDetailInput, params: TDetailParams) => TDetailKeyParams;
    queryKeys?: ProductListQueryKeys<TListKeyParams, TDetailKeyParams>;
    queryKeyNamespace?: QueryNamespace;
    cacheConfig?: CacheConfig;
    defaultPageSize?: number;
    cartQueryKeys?: CartQueryKeys;
    cartStorage?: StorageValueStore;
    isActiveCartQueryKey?: ActiveCartQueryKeyMatcher;
};
export type ProductListHooks<TProductList, TProductListItem, TCart extends ProductListCartLike, TListInput extends ProductListListInputBase, TDetailInput extends ProductListDetailInputBase> = {
    getListQueryOptions: (input: TListInput, options?: {
        queryOptions?: ReadQueryOptions<ProductListListResult<TProductList>>;
    }) => QueryFactoryOptions<ProductListListResult<TProductList>>;
    getDetailQueryOptions: (input: TDetailInput, options?: {
        queryOptions?: ReadQueryOptions<TProductList | null>;
    }) => QueryFactoryOptions<TProductList | null>;
    useProductLists: (input?: TListInput, options?: {
        queryOptions?: ReadQueryOptions<ProductListListResult<TProductList>>;
    }) => UseProductListsResult<TProductList>;
    useSuspenseProductLists: (input?: SuspenseListInput<TListInput>, options?: {
        queryOptions?: SuspenseQueryOptions<ProductListListResult<TProductList>>;
    }) => UseSuspenseProductListsResult<TProductList>;
    useProductList: (input: TDetailInput, options?: {
        queryOptions?: ReadQueryOptions<TProductList | null>;
    }) => UseProductListResult<TProductList>;
    useSuspenseProductList: (input: SuspenseDetailInput<TDetailInput>, options?: {
        queryOptions?: SuspenseQueryOptions<TProductList | null>;
    }) => UseSuspenseProductListResult<TProductList>;
    useProductListDetails: (inputs: TDetailInput[], options?: {
        enabled?: boolean;
        queryOptions?: ReadQueryOptions<TProductList | null>;
    }) => QueryResult<TProductList | null>[];
    usePrefetchProductLists: (options?: ProductListPrefetchHookOptions) => {
        prefetchProductLists: (input?: TListInput, prefetchOptions?: ProductListPrefetchOptions) => Promise<void>;
        delayedPrefetch: (input?: TListInput, delay?: number, prefetchId?: string) => string;
        cancelPrefetch: (prefetchId: string) => void;
    };
    usePrefetchProductList: (options?: ProductListPrefetchHookOptions) => {
        prefetchProductList: (input: TDetailInput, prefetchOptions?: ProductListPrefetchOptions) => Promise<void>;
        delayedPrefetch: (input: TDetailInput, delay?: number, prefetchId?: string) => string;
        cancelPrefetch: (prefetchId: string) => void;
    };
    useCreateFavoriteProductList: <TContext = unknown>(options?: ProductListMutationOptions<TProductList | null, CreateFavoriteProductListInput, TContext>) => UseMutationResult<TProductList | null, unknown, CreateFavoriteProductListInput, TContext>;
    useCreateCustomProductList: <TContext = unknown>(options?: ProductListMutationOptions<TProductList | null, CreateCustomProductListInput, TContext>) => UseMutationResult<TProductList | null, unknown, CreateCustomProductListInput, TContext>;
    useUpdateProductList: <TContext = unknown>(options?: ProductListMutationOptions<TProductList | null, UpdateProductListInput, TContext>) => UseMutationResult<TProductList | null, unknown, UpdateProductListInput, TContext>;
    useDeleteProductList: <TContext = unknown>(options?: ProductListMutationOptions<ProductListDeleteResponse, DeleteProductListInput, TContext>) => UseMutationResult<ProductListDeleteResponse, unknown, DeleteProductListInput, TContext>;
    useAddProductListItem: <TContext = unknown>(options?: ProductListMutationOptions<TProductListItem | null, AddProductListItemInput, TContext>) => UseMutationResult<TProductListItem | null, unknown, AddProductListItemInput, TContext>;
    useAddFavoriteProductListItem: <TContext = unknown>(options?: ProductListMutationOptions<TProductListItem | null, AddFavoriteProductListItemInput, TContext>) => UseMutationResult<TProductListItem | null, unknown, AddFavoriteProductListItemInput, TContext>;
    useCreateProductListCart: <TContext = unknown>(options?: ProductListMutationOptions<TCart, CreateProductListCartInput, TContext>) => UseMutationResult<TCart, unknown, CreateProductListCartInput, TContext>;
    useUpdateProductListItem: <TContext = unknown>(options?: ProductListMutationOptions<TProductListItem | null, UpdateProductListItemInput, TContext>) => UseMutationResult<TProductListItem | null, unknown, UpdateProductListItemInput, TContext>;
    useChangeProductListItemQuantity: <TContext = unknown>(options?: ProductListMutationOptions<TProductListItem | null, ChangeProductListItemQuantityInput, TContext>) => UseMutationResult<TProductListItem | null, unknown, ChangeProductListItemQuantityInput, TContext>;
    useIncrementProductListItem: <TContext = unknown>(options?: ProductListMutationOptions<TProductListItem | null, IncrementProductListItemInput, TContext>) => UseMutationResult<TProductListItem | null, unknown, IncrementProductListItemInput, TContext>;
    useDeleteProductListItem: <TContext = unknown>(options?: ProductListMutationOptions<ProductListDeleteResponse, DeleteProductListItemInput, TContext>) => UseMutationResult<ProductListDeleteResponse, unknown, DeleteProductListItemInput, TContext>;
};
export declare function createProductListHooks<TProductList, TProductListItem, TCart extends ProductListCartLike, TListInput extends ProductListListInputBase, TListParams = Omit<TListInput, "enabled" | "customerId" | "page">, TDetailInput extends ProductListDetailInputBase = ProductListDetailInputBase, TDetailParams = Omit<TDetailInput, "enabled" | "customerId">, TListKeyParams = TListParams & {
    customerId?: string | null;
}, TDetailKeyParams = TDetailParams & {
    customerId?: string | null;
}>({ service, buildListParams, buildDetailParams, buildListKeyParams, buildDetailKeyParams, queryKeys, queryKeyNamespace, cacheConfig, defaultPageSize, cartQueryKeys, cartStorage, isActiveCartQueryKey, }: CreateProductListHooksConfig<TProductList, TProductListItem, TCart, TListInput, TListParams, TDetailInput, TDetailParams, TListKeyParams, TDetailKeyParams>): ProductListHooks<TProductList, TProductListItem, TCart, TListInput, TDetailInput>;
export {};
//# sourceMappingURL=hooks.d.ts.map