import { ComputedRef, Ref } from 'vue';
import { HbFileItem_Intf } from '../utils/util';
import { FilePreviewListItem_Intf } from '../func_comp/hb_func_file_preview/src/file_preview';
export interface FilePreviewDetail {
    /**
     * 业务接口返回的原始附件列表。
     *
     * 每一项至少应包含预览或下载所需的地址字段：
     * - `previewUrl`：用于在线预览，缺失时该附件不会进入 `filePreviewList`
     * - `downloadUrl`：用于下载，缺失时仅影响下载能力
     * - `attachmentDesc` / `fileName`：用于展示和下载文件名
     */
    attachmentInfos: HbFileItem_Intf[];
}
export interface UseFilePreviewResult {
    /** 控制 `HbLibFilePreview` 弹窗是否显示，可用于组件的 `v-model:visible` */
    filePreviewVisible: Ref<boolean>;
    /** 当前预览文件地址；单条孤立预览或组件 src 兜底时使用 */
    pdfPreviewUrlRef: Ref<string>;
    /** 当前预览文件名；用于弹窗标题、下载文件名或组件 fileName 入参 */
    previewFileNameRef: Ref<string>;
    /**
     * 当前预览附件在原始 `attachmentInfos` 中的下标。
     *
     * 注意：该下标保持与业务附件列表一致，列表里不可预览的附件也会占位。
     * 当预览的是不在 `attachmentInfos` 中的临时记录时，值为 -1。
     */
    previewAttachmentIndexRef: Ref<number>;
    /**
     * 当前预览附件在 `filePreviewList` 中的下标。
     *
     * 注意：`filePreviewList` 只包含带 `previewUrl` 的可预览附件，
     * 因此它的下标可能与 `previewAttachmentIndexRef` 不一致。
     * 当走单条孤立预览时，值为 -1。
     */
    previewFileIndexRef: Ref<number>;
    /**
     * 可直接传给 `HbLibFilePreview` 的 fileList。
     *
     * 仅包含有 `previewUrl` 的附件；每项会自动转换为组件需要的
     * `src`、`fileName`、`downloadName`、`downloadUrl` 结构。
     */
    filePreviewList: ComputedRef<FilePreviewListItem_Intf[]>;
    /**
     * 当前弹窗应绑定的 fileList。
     *
     * 正常从附件列表打开预览时，它等同于 `filePreviewList`；
     * 单条孤立预览时为空数组，组件会改用 `pdfPreviewUrlRef` / `previewFileNameRef`。
     */
    activeFilePreviewList: ComputedRef<FilePreviewListItem_Intf[]>;
    /** 当前预览文件的组件数据；没有有效预览项时为 null */
    currentPreviewFile: ComputedRef<FilePreviewListItem_Intf | null>;
    /** 是否存在上一条可预览附件，可用于控制上一条按钮禁用状态 */
    hasPrevAttachment: ComputedRef<boolean>;
    /** 是否存在下一条可预览附件，可用于控制下一条按钮禁用状态 */
    hasNextAttachment: ComputedRef<boolean>;
    /** 可预览附件数量大于 1 时为 true，可用于控制预览导航栏显示 */
    showAttachmentNavBar: ComputedRef<boolean>;
    /**
     * 打开某个附件预览。
     *
     * @param record 原始附件记录
     * @param listIndex record 在原始 `attachmentInfos` 中的下标；传入后可减少查找歧义
     */
    handlePreview: (record: HbFileItem_Intf, listIndex?: number) => void;
    /** 下载单个附件；缺少 downloadUrl 时会展示提示 */
    handleDownload: (record: HbFileItem_Intf) => void;
    /** 关闭预览弹窗并重置当前预览状态 */
    handleClosePreview: () => void;
    /**
     * 响应 `HbLibFilePreview` 内部文件下标变化。
     *
     * 当组件内置切换文件时调用，用于同步 hook 内部的当前文件名、地址和下标。
     */
    handlePreviewFileIndexChange: (index: number) => void;
    /** 切换到上一条可预览附件 */
    goPrevAttachment: () => void;
    /** 切换到下一条可预览附件 */
    goNextAttachment: () => void;
    /** 暴露底层浏览器下载函数，便于业务侧按需复用 */
    triggerBrowserDownload: (url: string, filename: string) => Promise<void>;
    /**
     * 批量下载所有带 `downloadUrl` 的附件。
     *
     * 下载会按顺序触发，并在每次下载之间加入短暂间隔，
     * 以降低浏览器拦截连续多次程序化下载的概率。
     */
    handleBatchDownloadAttachment: () => Promise<void>;
}
/**
 * 将业务附件列表适配为 `HbLibFilePreview` 可直接使用的预览状态和操作方法。
 *
 * 这个 hook 主要解决三个问题：
 * 1. 从业务附件列表中过滤出可预览附件，并转换为 `HbLibFilePreview` 的 `fileList`。
 * 2. 维护预览弹窗显隐、当前文件地址、当前文件名和当前下标。
 * 3. 提供单个预览、上一条/下一条切换、单个下载和批量下载方法。
 *
 * @param detailRef 详情数据 ref，必须包含 `attachmentInfos` 附件列表。
 * @returns 预览弹窗状态、预览列表、导航状态和下载/预览操作方法。
 *
 * 基础用法：
 * ```ts
 * const detailRef = ref<FilePreviewDetail>({
 *     attachmentInfos: [],
 * });
 *
 * const {
 *     filePreviewVisible,
 *     pdfPreviewUrlRef,
 *     previewFileNameRef,
 *     previewFileIndexRef,
 *     activeFilePreviewList,
 *     handlePreview,
 *     handleClosePreview,
 *     handlePreviewFileIndexChange,
 *     handleDownload,
 *     handleBatchDownloadAttachment,
 * } = useFilePreview(detailRef);
 * ```
 *
 * 模板绑定示例：
 * ```vue
 * <HbLibFilePreview
 *     v-model:visible="filePreviewVisible"
 *     :src="pdfPreviewUrlRef"
 *     :file-name="previewFileNameRef"
 *     :file-list="activeFilePreviewList"
 *     :file-index="previewFileIndexRef"
 *     @close="handleClosePreview"
 *     @update:file-index="handlePreviewFileIndexChange"
 * />
 * ```
 *
 * 表格/列表中打开预览：
 * ```vue
 * <a-button @click="handlePreview(record, index)">预览</a-button>
 * <a-button @click="handleDownload(record)">下载</a-button>
 * <a-button @click="handleBatchDownloadAttachment">全部下载</a-button>
 * ```
 *
 * 下标说明：
 * - `previewAttachmentIndexRef` 对应原始 `attachmentInfos` 下标。
 * - `previewFileIndexRef` 对应过滤后的 `filePreviewList` 下标。
 * - 如果附件缺少 `previewUrl`，它不会出现在 `filePreviewList` 中，因此两个下标可能不同。
 */
export declare function useFilePreview(detailRef: Ref<FilePreviewDetail>): UseFilePreviewResult;
//# sourceMappingURL=useFilePreview.d.ts.map