import { default as ObsError } from '../error';
/**
 * 华为云OBS平台系统配置接口
 */
interface SystemConfig {
    /**
     * OBS为每个区域提供了一个Endpoint，用于处理该区域的访问请求。
     */
    readonly ENDPOINT: string;
    /**
     * 在华为云平台申请的密钥ID。
     */
    readonly ACCESS_KEY_ID: string;
    /**
     * 与ACCESS_KEY_ID对应的密钥信息。
     */
    readonly SECRET_ACCESS_KEY: string;
    /**
     * OBS桶的名称
     */
    readonly BUCKET_NAME: string;
}
/**
 * 上传事件回调
 */
interface UploadEventCallback {
    /**
     * 上传开始的回调函数
     */
    onStart?(): void;
    /**
     * 上传进度回调
     * @param event - 包含上传进度信息的对象
     * @param event.percent - 上传进度百分比
     */
    onProgress?(event: {
        percent: number;
    }): void;
    /**
     * 上传完成回调
     * @param event - 包含上传结果信息的对象
     * @param event.sourceFile - 文件对象
     * @param event.fileDir - 文件上传目录
     */
    onSuccess?(event: {
        sourceFile: File;
        fileDir: string;
    }): void;
    /**
     * 上传失败回调
     * @param error - 错误对象，可能是标准 Error 对象或自定义 ObsError 对象
     */
    onError?(error: Error | ObsError): void;
    /**
     * 取消上传回调
     */
    onAbort?(): void;
    /**
     * 上传结束回调，无论成功或失败都会触发
     */
    onFinally?(): void;
}
/**
 * 分片上传选项接口
 */
interface SliceUploadOptions extends UploadEventCallback {
    /**
     * OBS桶的名称。
     */
    bucketName: string;
    /**
     * 要上传的文件。
     */
    sourceFile: File;
    /**
     * 文件分片大小，单位为字节。
     * 默认为5MB。
     */
    partSize?: number;
    /**
     * 文件上传目录。
     * 默认为根目录。
     */
    fileDir?: string;
}
/**
 * 文件分片参数
 */
interface SliceUploadFilePart {
    /**
     * 分片索引
     */
    index: number;
    /**
     * 分片大小
     */
    size: number;
    /**
     * 分片的偏移量
     */
    offset: number;
}
/**
 * 文件上传状态
 */
declare enum FileUploadStatusEnum {
    /**
     * 准备就绪
     */
    READY = "ready",
    /**
     * 上传中
     */
    UPLOADING = "uploading",
    /**
     * 上传完成
     */
    SUCCESS = "success",
    /**
     * 上传失败
     */
    ERROR = "error",
    /**
     * 取消上传
     */
    ABORT = "abort"
}
export type { SystemConfig, SliceUploadOptions, SliceUploadFilePart, UploadEventCallback };
export { FileUploadStatusEnum };
