import { type CacheConfig, type CacheStrategy } from "../shared/cache-config";
import type { ReadQueryOptions, SuspenseQueryOptions } from "../shared/hook-types";
import type { PrefetchSkipMode } from "../shared/prefetch";
import type { QueryNamespace } from "../shared/query-keys";
import type { CreateProductReviewInput, ProductReviewListInputBase, ProductReviewListResponse, ProductReviewMutationOptions, ProductReviewQueryKeys, ProductReviewService, UseCreateProductReviewResult, UseProductReviewsResult, UseSuspenseProductReviewsResult } from "./types";
type ProductReviewPrefetchHookOptions = {
    cacheStrategy?: CacheStrategy;
    defaultDelay?: number;
    skipIfCached?: boolean;
    skipMode?: PrefetchSkipMode;
};
export type CreateProductReviewHooksConfig<TReview, TListInput extends ProductReviewListInputBase, TListParams, TCreateInput extends CreateProductReviewInput = CreateProductReviewInput> = {
    service: ProductReviewService<TReview, TListParams, TCreateInput>;
    buildListParams?: (input: TListInput) => TListParams;
    queryKeys?: ProductReviewQueryKeys<TListParams>;
    queryKeyNamespace?: QueryNamespace;
    cacheConfig?: CacheConfig;
    defaultPageSize?: number;
};
export declare function createProductReviewHooks<TReview, TListInput extends ProductReviewListInputBase, TListParams, TCreateInput extends CreateProductReviewInput = CreateProductReviewInput>({ service, buildListParams, queryKeys, queryKeyNamespace, cacheConfig, defaultPageSize, }: CreateProductReviewHooksConfig<TReview, TListInput, TListParams, TCreateInput>): {
    getProductReviewsQueryOptions: (input: TListInput, options?: {
        queryOptions?: ReadQueryOptions<ProductReviewListResponse<TReview>> | undefined;
        cacheStrategy?: CacheStrategy;
    } | undefined) => import("../shared/hook-types").QueryFactoryOptions<ProductReviewListResponse<TReview>>;
    useProductReviews: (input: TListInput, options?: {
        queryOptions?: ReadQueryOptions<ProductReviewListResponse<TReview>>;
    }) => UseProductReviewsResult<TReview>;
    useSuspenseProductReviews: (input: TListInput, options?: {
        queryOptions?: SuspenseQueryOptions<ProductReviewListResponse<TReview>>;
    }) => UseSuspenseProductReviewsResult<TReview>;
    usePrefetchProductReviews: (options?: ProductReviewPrefetchHookOptions) => {
        cancelPrefetch: (prefetchId: string) => void;
        delayedPrefetch: (input: TListInput, delay?: number, prefetchId?: string) => string;
        prefetchProductReviews: (input: TListInput) => Promise<void>;
    };
    useCreateProductReview: <TContext = unknown>(options?: ProductReviewMutationOptions<TReview, TCreateInput, TContext>) => UseCreateProductReviewResult<TReview, TCreateInput, TContext>;
};
export type ProductReviewHooks<TReview, TListInput extends ProductReviewListInputBase, TListParams, TCreateInput extends CreateProductReviewInput = CreateProductReviewInput> = ReturnType<typeof createProductReviewHooks<TReview, TListInput, TListParams, TCreateInput>>;
export {};
//# sourceMappingURL=hooks.d.ts.map