import { HookService, ReactHook, TypedHookService } from '../types';

/**
 * Creates a service that can store and use hook values from anywhere in your code
 *
 * ⚠️ RECOMMENDATION: Use `createSingletonService` instead for better performance and state consistency
 *
 * This creates a NEW instance every time it's called. For most React applications,
 * you want shared state across components, so use `createSingletonService` instead.
 *
 * Only use this if you specifically need multiple independent instances.
 */
export declare function createHookService<T = unknown>(): HookService<T>;
/**
 * 🚀 RECOMMENDED: Create or get a singleton service
 *
 * This is the standard way to create services in react-use-anywhere.
 * Benefits:
 * - ✅ Shared state across your entire app
 * - ✅ Better performance (no duplicate instances)
 * - ✅ Consistent behavior across components
 * - ✅ Memory efficient
 *
 * @param hookName - Name of the hook as registered in HookProvider
 */
export declare function createSingletonService<T = unknown>(hookName: string): HookService<T>;
/**
 * Get an existing singleton service
 */
export declare function getSingletonService<T = unknown>(hookName: string): HookService<T> | null;
/**
 * Reset all singleton services (useful for testing)
 */
export declare function resetAllServices(): void;
/**
 * 🆕 TYPE-SAFE VERSION: Create a service with full type safety
 * Use this when you want compile-time checking of hook names
 *
 * @param hookName - Hook name (will be type-checked against registered hooks)
 */
export declare function createTypedSingletonService<THooks extends Record<string, ReactHook<unknown>>, K extends keyof THooks>(hookName: K): HookService<ExtractHookType<THooks[K]>>;
/**
 * 🆕 STRICT TYPE-SAFE VERSION: Enforces hook name validation at compile time
 * This version will show TypeScript errors if you use invalid hook names
 *
 * Usage:
 * ```typescript
 * // First, define your hooks type
 * type MyHooks = {
 *   navigate: () => NavigateFunction;
 *   auth: () => AuthState;
 * };
 *
 * // Then create services with compile-time validation
 * const navService = createStrictSingletonService<MyHooks>('navigate'); // ✅ Valid
 * const badService = createStrictSingletonService<MyHooks>('invalid'); // ❌ TypeScript Error
 * ```
 */
export declare function createStrictSingletonService<THooks extends Record<string, ReactHook<unknown>>>(hookName: keyof THooks & string): HookService<ExtractHookType<THooks[typeof hookName]>>;
/**
 * 🆕 INFERRED TYPE-SAFE VERSION: Automatically infers types from provider
 * This creates services that are automatically typed based on your HookProvider setup
 */
export declare function createInferredSingletonService<THooks extends Record<string, ReactHook<unknown>>, K extends keyof THooks>(hookName: K): TypedHookService<ExtractHookType<THooks[K]>, THooks>;
type ExtractHookType<T> = T extends ReactHook<infer R> ? R : never;
export {};
