/**
 * This file is part of the NocoBase (R) project.
 * Copyright (c) 2020-2024 NocoBase Co., Ltd.
 * Authors: NocoBase Team.
 *
 * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
 * For more information, please refer to: https://www.nocobase.com/agreement.
 */
import { FlowModel } from '@nocobase/flow-engine';
type FilterConfig = {
    /** 筛选器的 model uid */
    filterId: string;
    /** 数据区块或者图表区块的 model uid */
    targetId: string;
    /** 被筛选区块的数据表字段路径 */
    filterPaths?: string[];
    /** 筛选操作符，每个条件的操作符可以不一样 */
    operator?: string;
};
export type RefreshTargetsByFilterOptions = {
    excludeTargetIds?: Set<string> | string[];
};
export type ConnectFieldsConfig = {
    targets: {
        /** 数据区块或者图表区块的 model uid */
        targetId: string;
        /** 被筛选区块的数据表字段路径 */
        filterPaths: string[];
    }[];
};
export declare class FilterManager {
    private filterConfigs;
    private readonly gridModel;
    constructor(gridModel: FlowModel, filterConfigs?: FilterConfig[]);
    saveFilterConfigs(): Promise<void>;
    getFilterConfigs(): FilterConfig[];
    getConnectFieldsConfig(filterModelUid: string): ConnectFieldsConfig | undefined;
    prepareFiltersForTarget(targetId: string): Promise<Set<any>>;
    saveConnectFieldsConfig(filterModelUid: string, config: ConnectFieldsConfig): Promise<void>;
    /**
     * 添加筛选配置
     *
     * 将新的筛选配置添加到管理器中。如果相同的筛选器和目标组合已存在，则会更新配置。
     *
     * @param filterConfig - 要添加的筛选配置
     * @returns Promise<void>
     *
     * @example
     * ```typescript
     * await filterManager.addFilterConfig({
     *   filterId: 'filter-1',
     *   targetId: 'target-1',
     *   filterPaths: ['name'],
     *   operator: '$eq'
     * });
     * ```
     */
    addFilterConfig(filterConfig: FilterConfig): Promise<void>;
    /**
     * 删除筛选配置
     *
     * 根据提供的参数删除对应的筛选配置。支持多种删除策略：
     * - 仅提供 filterId：删除该筛选器相关的所有配置
     * - 仅提供 targetId：删除该目标相关的所有配置
     * - 两个都提供：删除特定的筛选器-目标组合配置
     *
     * @param options - 删除选项
     * @param options.filterId - 筛选器模型 UID（可选）
     * @param options.targetId - 目标模型 UID（可选）
     * @returns Promise<number> 返回被删除的配置数量
     * @throws 当两个参数都未提供时抛出错误
     *
     * @example
     * ```typescript
     * // 删除筛选器的所有配置
     * const removedCount = await filterManager.removeFilterConfig({ filterId: 'filter-1' });
     *
     * // 删除目标的所有配置
     * const removedCount = await filterManager.removeFilterConfig({ targetId: 'target-1' });
     *
     * // 删除特定的筛选器-目标组合配置
     * const removedCount = await filterManager.removeFilterConfig({
     *   filterId: 'filter-1',
     *   targetId: 'target-1'
     * });
     * ```
     */
    removeFilterConfig({ filterId, targetId, persist, }: {
        filterId?: string;
        targetId?: string;
        /** 是否持久化删除操作 */
        persist?: boolean;
    }): Promise<number>;
    /**
     * 将筛选配置绑定到 TargetModel
     *
     * 根据提供的 targetId 查找与之关联的已存在的筛选配置，
     * 然后通过 targetModel.resource.addFilterGroup 方法将这些配置添加到目标模型中。
     *
     * @param targetId - 目标模型的唯一标识符
     * @throws 当 targetId 为空或目标模型不存在时抛出错误
     *
     * @example
     * ```typescript
     * filterManager.bindToTarget('target-model-uid');
     * ```
     */
    bindToTarget(targetId: string): void;
    /**
     * 将筛选配置从 TargetModel 解除绑定
     *
     * 根据提供的 targetId 查找与之关联的已存在的筛选配置，
     * 然后通过 targetModel.resource.removeFilterGroup 方法将这些配置从目标模型中移除。
     *
     * @param targetId - 目标模型的唯一标识符
     * @throws 当 targetId 为空或目标模型不存在时抛出错误
     *
     * @example
     * ```typescript
     * filterManager.unbindFromTarget('target-model-uid');
     * ```
     */
    unbindFromTarget(targetId: string): void;
    /**
     * 根据筛选器刷新相关的目标模型
     *
     * 通过提供的筛选器模型 UID，找出所有相关的筛选配置，
     * 然后重新绑定筛选条件并刷新对应的目标模型数据。
     *
     * @param filterId - 筛选器模型的 UID，可以是单个字符串或字符串数组
     * @returns Promise，当所有目标模型都刷新完成后解决
     * @throws 当参数为空或目标模型不存在时抛出错误
     *
     * @example
     * ```typescript
     * // 刷新单个筛选器相关的目标
     * await filterManager.refreshTargetsByFilter('filter-1');
     *
     * // 刷新多个筛选器相关的目标
     * await filterManager.refreshTargetsByFilter(['filter-1', 'filter-2']);
     * ```
     */
    refreshTargetsByFilter(filterId: string | string[], options?: RefreshTargetsByFilterOptions): Promise<void>;
}
export {};
