import type { SalesSearchItem, SalesSearchSort, SearchMode } from '../api/searchService';
/**
 * useEsSalesGridData
 *
 * 订单结果区（业务列表 / 管理表格）共享的 ES 数据生命周期 hook。
 *
 * 把「从 ES `/shop/es/search/sales` 取数 + 翻页累积 + 并发护栏 + 实时 delta 订阅/回写」
 * 这套逻辑收敛到一处，供 OrderBusinessList（业务模式单 tab）与 OrderAdminGrid（管理模式表格）复用。
 *
 * 职责：
 * 1. 按 keyword / searchMode / filters / sort / perPage 拉取数据，输入变化时重置回第 1 页重查；
 * 2. `fetchPage(page, append)` 支持「替换（首屏/重查）」与「追加（滚动翻页）」两种写入；
 * 3. reqId 并发护栏：只采用最新一次请求结果，丢弃过期响应；
 * 4. 接入 OS Server 实时 delta：命中已加载项时浅合并回写，并通过 `onDelta` 把变更项透出给调用方
 *    （业务：bump 详情刷新版本；管理：通知外层刷新已打开详情）；
 * 5. 卸载 / 空关键词时取消订阅。
 *
 * 不负责：分页 UI、虚拟滚动、列配置、行高亮、详情版本表——这些留给各自调用方。
 */
export interface UseEsSalesGridDataParams {
    /** 搜索关键词（外部统一搜索框驱动） */
    keyword: string;
    /** 匹配方式：业务 = 'identifier'（精确），管理 = 'fuzzy'（模糊） */
    searchMode: SearchMode;
    /** 每页条数 */
    perPage: number;
    /** ES filters（管理模式表格筛选映射后传入；业务模式不传） */
    filters?: Record<string, any>;
    /** ES sort（管理模式表格排序映射后传入；业务模式不传） */
    sort?: SalesSearchSort[];
    /** OS Server 订阅 id 前缀，用于区分业务/管理两套订阅 */
    subscriberPrefix: string;
    /**
     * 实时 delta 命中已加载项后的附加副作用（列表本身的浅合并回写已在 hook 内完成）。
     * - 业务模式：bump 详情刷新版本；
     * - 管理模式：通知外层刷新已打开的详情。
     */
    onDelta?: (deltaItems: SalesSearchItem[]) => void;
}
export interface UseEsSalesGridDataResult {
    items: SalesSearchItem[];
    total: number;
    loading: boolean;
    error: unknown;
    /** 当前已加载到的页码（从 1 起） */
    page: number;
    /** 是否还有下一页（已加载条数 < 总数） */
    hasMore: boolean;
    /**
     * 拉取指定页。
     * - `append=false`：替换（首屏 / 改 keyword、筛选、排序后的重查）；
     * - `append=true`：追加到已累积列表（滚动触底加载下一页）。
     */
    fetchPage: (targetPage: number, append: boolean) => Promise<void>;
    /** 本实例的 OS Server 订阅 id */
    subscriberId: string;
}
export declare function useEsSalesGridData(params: UseEsSalesGridDataParams): UseEsSalesGridDataResult;
