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 { RegionDetailInputBase, RegionListInputBase, RegionListResponse, RegionQueryKeys, RegionService, UseRegionResult, UseRegionsResult, UseSuspenseRegionResult, UseSuspenseRegionsResult } from "./types";
export type CreateRegionHooksConfig<TRegion, TListInput extends RegionListInputBase, TListParams, TDetailInput extends RegionDetailInputBase, TDetailParams> = {
    service: RegionService<TRegion, TListParams, TDetailParams>;
    buildListParams?: (input: TListInput) => TListParams;
    buildDetailParams?: (input: TDetailInput) => TDetailParams;
    queryKeys?: RegionQueryKeys<TListParams, TDetailParams>;
    queryKeyNamespace?: QueryNamespace;
    cacheConfig?: CacheConfig;
    defaultPageSize?: number;
};
export declare function createRegionHooks<TRegion, TListInput extends RegionListInputBase, TListParams, TDetailInput extends RegionDetailInputBase, TDetailParams>({ service, buildListParams, buildDetailParams, queryKeys, queryKeyNamespace, cacheConfig, defaultPageSize, }: CreateRegionHooksConfig<TRegion, TListInput, TListParams, TDetailInput, TDetailParams>): {
    getListQueryOptions: (input: TListInput, options?: {
        queryOptions?: ReadQueryOptions<RegionListResponse<TRegion>> | undefined;
        cacheStrategy?: CacheStrategy;
    } | undefined) => import("../shared/hook-types").QueryFactoryOptions<RegionListResponse<TRegion>>;
    getDetailQueryOptions: (input: TDetailInput, options?: {
        queryOptions?: ReadQueryOptions<TRegion | null> | undefined;
        cacheStrategy?: CacheStrategy;
    } | undefined) => import("../shared/hook-types").QueryFactoryOptions<TRegion | null>;
    useRegions: (input: TListInput, options?: {
        queryOptions?: ReadQueryOptions<RegionListResponse<TRegion>>;
    }) => UseRegionsResult<TRegion>;
    useSuspenseRegions: (input: TListInput, options?: {
        queryOptions?: SuspenseQueryOptions<RegionListResponse<TRegion>>;
    }) => UseSuspenseRegionsResult<TRegion>;
    useRegion: (input: TDetailInput, options?: {
        queryOptions?: ReadQueryOptions<TRegion | null>;
    }) => UseRegionResult<TRegion>;
    useSuspenseRegion: (input: TDetailInput, options?: {
        queryOptions?: SuspenseQueryOptions<TRegion | null>;
    }) => UseSuspenseRegionResult<TRegion>;
    usePrefetchRegions: (options?: {
        cacheStrategy?: CacheStrategy;
        defaultDelay?: number;
        skipIfCached?: boolean;
        skipMode?: PrefetchSkipMode;
    }) => {
        prefetchRegions: (input: TListInput) => Promise<void>;
        delayedPrefetch: (input: TListInput, delay?: number, prefetchId?: string) => string;
        cancelPrefetch: (prefetchId: string) => void;
    };
    usePrefetchRegion: (options?: {
        cacheStrategy?: CacheStrategy;
        defaultDelay?: number;
        skipIfCached?: boolean;
        skipMode?: PrefetchSkipMode;
    }) => {
        prefetchRegion: (input: TDetailInput) => Promise<void>;
        delayedPrefetch: (input: TDetailInput, delay?: number, prefetchId?: string) => string;
        cancelPrefetch: (prefetchId: string) => void;
    };
};
export type RegionHooks<TRegion, TListInput extends RegionListInputBase, TListParams, TDetailInput extends RegionDetailInputBase, TDetailParams> = ReturnType<typeof createRegionHooks<TRegion, TListInput, TListParams, TDetailInput, TDetailParams>>;
//# sourceMappingURL=hooks.d.ts.map