import type { AuthQueryKeys } from "../auth/types";
import { type CacheConfig } from "../shared/cache-config";
import type { ReadQueryOptions, SuspenseQueryOptions } from "../shared/hook-types";
import { type QueryNamespace } from "../shared/query-keys";
import type { CustomerAddressAdapter, CustomerAddressCreateInputBase, CustomerAddressListInputBase, CustomerAddressListResponse, CustomerAddressUpdateInputBase, CustomerMutationOptions, CustomerProfileUpdateInputBase, CustomerQueryKeys, CustomerService, UseCustomerAddressesResult, UseSuspenseCustomerAddressesResult } from "./types";
export type CreateCustomerHooksConfig<TCustomer, TAddress, TListInput extends CustomerAddressListInputBase, TListParams, TCreateInput extends CustomerAddressCreateInputBase, TCreateParams, TUpdateInput extends CustomerAddressUpdateInputBase, TUpdateParams, TUpdateCustomerInput extends CustomerProfileUpdateInputBase, TUpdateCustomerParams> = {
    service: CustomerService<TCustomer, TAddress, TListParams, TCreateParams, TUpdateParams, TUpdateCustomerParams>;
    buildListParams?: (input: TListInput) => TListParams;
    addressAdapter?: CustomerAddressAdapter<TCreateInput, TCreateParams, TUpdateInput, TUpdateParams>;
    buildUpdateCustomerParams?: (input: TUpdateCustomerInput) => TUpdateCustomerParams;
    queryKeys?: CustomerQueryKeys<TListParams>;
    authQueryKeys?: Pick<AuthQueryKeys, "customer">;
    queryKeyNamespace?: QueryNamespace;
    cacheConfig?: CacheConfig;
};
/**
 * Create customer hooks with strongly-typed address/profile mappers.
 *
 * @example
 * const { useCustomerAddresses, useUpdateCustomer } = createCustomerHooks({
 *   service,
 *   buildListParams: (input) => ({ ...input }),
 * })
 */
export declare function createCustomerHooks<TCustomer, TAddress, TListInput extends CustomerAddressListInputBase, TListParams = TListInput, TCreateInput extends CustomerAddressCreateInputBase = CustomerAddressCreateInputBase, TCreateParams = TCreateInput, TUpdateInput extends CustomerAddressUpdateInputBase = CustomerAddressUpdateInputBase, TUpdateParams = TUpdateInput, TUpdateCustomerInput extends CustomerProfileUpdateInputBase = CustomerProfileUpdateInputBase, TUpdateCustomerParams = TUpdateCustomerInput>({ service, buildListParams, addressAdapter, buildUpdateCustomerParams, queryKeys, authQueryKeys, queryKeyNamespace, cacheConfig, }: CreateCustomerHooksConfig<TCustomer, TAddress, TListInput, TListParams, TCreateInput, TCreateParams, TUpdateInput, TUpdateParams, TUpdateCustomerInput, TUpdateCustomerParams>): {
    useCustomerAddresses: (input: TListInput, options?: {
        queryOptions?: ReadQueryOptions<CustomerAddressListResponse<TAddress>>;
    }) => UseCustomerAddressesResult<TAddress>;
    useSuspenseCustomerAddresses: (input: TListInput, options?: {
        queryOptions?: SuspenseQueryOptions<CustomerAddressListResponse<TAddress>>;
    }) => UseSuspenseCustomerAddressesResult<TAddress>;
    useCreateCustomerAddress: <TContext = unknown>(options?: CustomerMutationOptions<TAddress, TCreateInput, TContext>) => import("@tanstack/react-query").UseMutationResult<TAddress, unknown, TCreateInput, TContext>;
    useUpdateCustomerAddress: <TContext = unknown>(options?: CustomerMutationOptions<TAddress, TUpdateInput, TContext>) => import("@tanstack/react-query").UseMutationResult<TAddress, unknown, TUpdateInput, TContext>;
    useDeleteCustomerAddress: <TContext = unknown>(options?: CustomerMutationOptions<void, {
        addressId: string;
    }, TContext>) => import("@tanstack/react-query").UseMutationResult<void, unknown, {
        addressId: string;
    }, TContext>;
    useUpdateCustomer: <TContext = unknown>(options?: CustomerMutationOptions<TCustomer, TUpdateCustomerInput, TContext>) => import("@tanstack/react-query").UseMutationResult<TCustomer, unknown, TUpdateCustomerInput, TContext>;
};
export type CustomerHooks<TCustomer, TAddress, TListInput extends CustomerAddressListInputBase, TListParams = TListInput, TCreateInput extends CustomerAddressCreateInputBase = CustomerAddressCreateInputBase, TCreateParams = TCreateInput, TUpdateInput extends CustomerAddressUpdateInputBase = CustomerAddressUpdateInputBase, TUpdateParams = TUpdateInput, TUpdateCustomerInput extends CustomerProfileUpdateInputBase = CustomerProfileUpdateInputBase, TUpdateCustomerParams = TUpdateCustomerInput> = ReturnType<typeof createCustomerHooks<TCustomer, TAddress, TListInput, TListParams, TCreateInput, TCreateParams, TUpdateInput, TUpdateParams, TUpdateCustomerInput, TUpdateCustomerParams>>;
//# sourceMappingURL=hooks.d.ts.map