import { Context, h, Logger, Session } from 'koishi';
import { CaveObject, Config, StoredElement } from './index';
import { FileManager } from './FileManager';
import { HashManager } from './HashManager';
import { AIManager } from './AIManager';
import { PendManager } from './PendManager';
/**
 * @description 构建一条用于发送的完整回声洞消息，处理不同存储后端的资源链接。
 * @param cave 回声洞对象。
 * @param config 插件配置。
 * @param fileManager 文件管理器实例。
 * @param logger 日志记录器实例。
 * @param platform 目标平台名称 (e.g., 'onebot')。
 * @param prefix 可选的消息前缀 (e.g., '已删除', '待审核')。
 * @returns 包含多条消息的数组，每条消息是一个 (string | h)[] 数组。
 */
export declare function buildCaveMessage(cave: CaveObject, config: Config, fileManager: FileManager, logger: Logger, platform?: string, prefix?: string): Promise<(string | h)[][]>;
/**
 * @description 获取下一个可用的回声洞 ID，采用“回收ID > 扫描空缺 > 最大ID+1”策略。
 * @param ctx Koishi 上下文。
 * @param reusableIds 可复用 ID 的内存缓存。
 * @returns 可用的新 ID。
 */
export declare function getNextCaveId(ctx: Context, reusableIds: Set<number>): Promise<number>;
/**
 * @description 解析消息元素，分离出文本和待下载的媒体文件。
 * @param sourceElements 原始的 Koishi 消息元素数组。
 * @param newId 这条回声洞的新 ID。
 * @param session 触发操作的会话。
 * @param config 插件配置。
 * @param logger 日志实例。
 * @param creationTime 统一的创建时间戳，用于生成文件名。
 * @returns 包含数据库元素和待保存媒体列表的对象。
 */
export declare function processMessageElements(sourceElements: h[], newId: number, session: Session, creationTime: Date): Promise<{
    finalElementsForDb: StoredElement[];
    mediaToSave: {
        sourceUrl: string;
        fileName: string;
    }[];
}>;
/**
 * @description 根据提供的配对关系，将项目 ID 进行聚类。
 * @param pairs 一个由 [number, number] 组成的数组，代表需要合并的项目 ID 配对。
 * @returns 返回一个二维数组，每个子数组代表一个大小大于1的聚类。
 */
export declare function clusterItemsFromPairs(pairs: [number, number][]): number[][];
/**
 * @description 通用的 LSH (局部敏感哈希) 候选对生成器。
 * @param items 要处理的项目数组。
 * @param getBucketInfo 一个函数，接收单个项目，并返回其唯一 ID 和一个桶键数组。
 * @returns 一个 Set，包含所有候选对的字符串键 (e.g., "123-456")。
 */
export declare function generateFromLSH<T>(items: T[], getBucketInfo: (item: T) => {
    id: number;
    keys: string[];
}): Set<string>;
/**
 * @description 处理新回声洞创建后的后续逻辑，包括媒体下载、查重、AI分析、哈希存储和状态更新。
 * @param ctx Koishi 上下文。
 * @param config 插件配置。
 * @param fileManager 文件管理器实例。
 * @param logger 日志记录器实例。
 * @param reusableIds 可复用 ID 的内存缓存。
 * @param newCave 已初步创建（status: 'preload'）的回声洞对象。
 * @param mediaToSave 待保存的媒体文件列表。
 * @param session 触发操作的会话。
 * @param hashManager 哈希管理器实例（如果启用）。
 * @param aiManager AI管理器实例（如果启用）。
 * @param reviewManager 审核管理器实例（如果启用）。
 */
export declare function processNewCave(ctx: Context, config: Config, fileManager: FileManager, logger: Logger, reusableIds: Set<number>, newCave: CaveObject, session: Session, mediaToSave: {
    sourceUrl: string;
    fileName: string;
}[], hashManager: HashManager | null, aiManager: AIManager | null, reviewManager: PendManager | null): Promise<void>;
