/**
 * 状态管理器类型定义
 */
/**
 * 状态更新函数类型
 *
 * @template T - 状态值类型
 * @param current - 当前状态值
 * @returns 新的状态值
 */
export type StateUpdater<T> = (current: T) => T;
/**
 * 状态订阅回调函数类型
 *
 * @template T - 状态值类型
 * @param value - 新的状态值
 * @param previous - 之前的状态值
 */
export type StateSubscriber<T> = (value: T, previous: T) => void;
/**
 * 取消订阅函数类型
 */
export type Unsubscribe = () => void;
/**
 * 状态作用域标识符
 */
export type StateScope = string | symbol;
/**
 * 状态实例标识符
 */
export type StateInstanceId = string | symbol;
/**
 * 状态实例配置选项
 */
export interface StateInstanceOptions {
    /**
     * 状态实例标识符
     */
    id?: StateInstanceId;
    /**
     * 状态作用域
     */
    scope?: StateScope;
    /**
     * 是否启用开发模式（用于调试）
     */
    devMode?: boolean;
    /**
     * 状态变更时的中间件函数
     */
    middleware?: Array<(value: unknown, previous: unknown) => unknown>;
}
/**
 * 状态实例核心接口
 *
 * 这是状态管理器的最小抽象接口，不绑定任何具体实现
 *
 * @template T - 状态值类型
 */
export interface IStateInstance<T = unknown> {
    /**
     * 获取当前状态值
     *
     * @returns 当前状态值
     */
    get(): T;
    /**
     * 更新状态值
     *
     * @param value - 新的状态值或更新函数
     */
    set(value: T | StateUpdater<T>): void;
    /**
     * 订阅状态变化
     *
     * @param subscriber - 订阅回调函数
     * @returns 取消订阅函数
     */
    subscribe(subscriber: StateSubscriber<T>): Unsubscribe;
    /**
     * 获取状态实例标识符
     */
    getId(): StateInstanceId;
    /**
     * 获取状态作用域
     */
    getScope(): StateScope | undefined;
    /**
     * 销毁状态实例，清理所有订阅和资源
     */
    destroy(): void;
    /**
     * 检查状态实例是否已销毁
     */
    isDestroyed(): boolean;
}
/**
 * 状态适配器接口
 *
 * 适配器负责将外部状态库映射到 Secra 状态抽象
 *
 * @template T - 状态值类型
 */
export interface IStateAdapter {
    /**
     * 创建状态实例
     *
     * @param initialValue - 初始状态值
     * @param options - 状态实例配置选项
     * @returns 状态实例
     */
    createInstance<T>(initialValue: T, options?: StateInstanceOptions): IStateInstance<T>;
    /**
     * 销毁适配器，清理所有资源
     */
    destroy(): void;
    /**
     * 获取适配器名称（用于调试和日志）
     */
    getName(): string;
}
/**
 * 状态注册表接口
 */
export interface IStateRegistry {
    /**
     * 注册状态实例
     *
     * @param instance - 状态实例
     */
    register(instance: IStateInstance): void;
    /**
     * 注销状态实例
     *
     * @param id - 状态实例标识符
     */
    unregister(id: StateInstanceId): void;
    /**
     * 根据标识符获取状态实例
     *
     * @param id - 状态实例标识符
     * @returns 状态实例，如果不存在则返回 undefined
     */
    getInstance(id: StateInstanceId): IStateInstance | undefined;
    /**
     * 根据作用域获取所有状态实例
     *
     * @param scope - 状态作用域
     * @returns 状态实例数组
     */
    getInstancesByScope(scope: StateScope): IStateInstance[];
    /**
     * 获取所有状态实例
     *
     * @returns 状态实例数组
     */
    getAllInstances(): IStateInstance[];
    /**
     * 销毁指定作用域的所有状态实例
     *
     * @param scope - 状态作用域
     */
    destroyScope(scope: StateScope): void;
    /**
     * 销毁所有状态实例
     */
    destroyAll(): void;
    /**
     * 获取注册表中的实例数量
     */
    size(): number;
}
/**
 * 派生状态配置
 */
export interface DerivedStateConfig<T, D extends readonly IStateInstance[]> {
    /**
     * 依赖的状态实例数组
     */
    dependencies: D;
    /**
     * 派生函数，根据依赖状态计算派生状态
     *
     * @param values - 依赖状态的当前值数组
     * @returns 派生状态值
     */
    derive: (values: {
        [K in keyof D]: D[K] extends IStateInstance<infer V> ? V : never;
    }) => T;
    /**
     * 是否启用相等性检查（避免不必要的更新）
     */
    equalityCheck?: (a: T, b: T) => boolean;
}
/**
 * 派生状态实例接口
 *
 * @template T - 派生状态值类型
 */
export interface IDerivedStateInstance<T = unknown> extends IStateInstance<T> {
    /**
     * 获取依赖的状态实例
     */
    getDependencies(): readonly IStateInstance[];
    /**
     * 手动重新计算派生状态
     */
    recompute(): void;
}
/**
 * 状态管理器配置选项
 */
export interface StateManagerOptions {
    /**
     * 默认状态适配器
     */
    defaultAdapter?: IStateAdapter;
    /**
     * 是否启用全局注册表
     */
    enableRegistry?: boolean;
    /**
     * 默认作用域
     */
    defaultScope?: StateScope;
    /**
     * 是否启用开发模式
     */
    devMode?: boolean;
}
//# sourceMappingURL=types.d.ts.map