import { Plugin } from 'vite';

/**
 * 云存储抽象接口
 * Cloud Storage Abstract Interface
 */
interface AssetInfo$1 {
    filePath: string;
    fileName: string;
    fileSize: number;
    fileHash: string;
    mimeType: string;
}
interface UploadResult$1 {
    success: boolean;
    filePath: string;
    url: string;
    size: number;
    error?: Error;
}
interface CloudStorageConfig$1 {
    provider: 'oss' | 'cos' | 's3' | 'obs';
    publicPath: string;
    prefix?: string;
    [key: string]: any;
}
/**
 * 云存储抽象基类
 */
declare abstract class CloudStorageProvider {
    protected config: CloudStorageConfig$1;
    protected uploadResults: Map<string, UploadResult$1>;
    constructor(config: CloudStorageConfig$1);
    /**
     * 初始化客户端连接
     */
    abstract initialize(): Promise<void>;
    /**
     * 上传单个文件
     */
    abstract uploadFile(asset: AssetInfo$1, content: Buffer): Promise<UploadResult$1>;
    /**
     * 批量上传文件
     */
    abstract uploadAssets(assets: {
        asset: AssetInfo$1;
        content: Buffer;
    }[]): Promise<void>;
    /**
     * 检查文件是否存在
     */
    abstract fileExists(filePath: string): Promise<boolean>;
    /**
     * 删除文件
     */
    abstract deleteFile(filePath: string): Promise<boolean>;
    /**
     * 生成文件完整URL
     */
    getFileUrl(filePath: string): string;
    /**
     * 获取上传结果
     */
    getUploadResult(filePath: string): UploadResult$1 | undefined;
    /**
     * 获取所有上传结果
     */
    getAllUploadResults(): Map<string, UploadResult$1>;
    /**
     * 清理资源
     */
    cleanup(): void;
    /**
     * 生成目标文件路径
     */
    protected generateTargetPath(asset: AssetInfo$1): string;
}
/**
 * 云存储工厂类
 */
declare class CloudStorageFactory {
    static providers: Map<string, typeof CloudStorageProvider>;
    /**
     * 注册存储提供商
     */
    static registerProvider(name: string, provider: typeof CloudStorageProvider): void;
    /**
     * 创建存储提供商实例
     */
    static createProvider(config: CloudStorageConfig$1): CloudStorageProvider;
    /**
     * 获取支持的提供商列表
     */
    static getSupportedProviders(): string[];
}

/**
 * 华为云OBS存储提供商
 * Huawei Cloud OBS Storage Provider
 */

interface OBSConfig extends CloudStorageConfig$1 {
    provider: 'obs';
    obs: {
        accessKeyId: string;
        secretAccessKey: string;
        bucket: string;
        endpoint: string;
        signature?: string;
        timeout?: number;
    };
    maxConcurrency?: number;
    cache?: boolean;
    cacheFile?: string;
    verbose?: boolean;
}

/**
 * AWS S3存储提供商
 * AWS S3 Storage Provider
 */

interface S3Config extends CloudStorageConfig$1 {
    provider: 's3';
    s3: {
        accessKeyId: string;
        secretAccessKey: string;
        bucket: string;
        region: string;
        endpoint?: string;
        s3ForcePathStyle?: boolean;
        signatureVersion?: string;
        timeout?: number;
    };
    maxConcurrency?: number;
    cache?: boolean;
    cacheFile?: string;
    verbose?: boolean;
}

/**
 * 腾讯云COS存储提供商
 * Tencent Cloud COS Storage Provider
 */

interface COSConfig extends CloudStorageConfig$1 {
    provider: 'cos';
    cos: {
        secretId: string;
        secretKey: string;
        bucket: string;
        region: string;
        appId?: string;
        domain?: string;
        protocol?: 'http' | 'https';
        timeout?: number;
    };
    maxConcurrency?: number;
    cache?: boolean;
    cacheFile?: string;
    verbose?: boolean;
}

/**
 * 阿里云OSS存储提供商
 * Alibaba Cloud OSS Storage Provider
 */

interface OSSConfig extends CloudStorageConfig$1 {
    provider: 'oss';
    oss: {
        accessKeyId: string;
        accessKeySecret: string;
        bucket: string;
        region: string;
        endpoint?: string;
        secure?: boolean;
        timeout?: number;
    };
    maxConcurrency?: number;
    cache?: boolean;
    cacheFile?: string;
    verbose?: boolean;
}

type AllCloudConfig = OSSConfig | COSConfig | S3Config | OBSConfig;

/**
 * 云存储配置基础类型
 * Cloud Storage Configuration Base Types
 */
interface CloudStorageConfig {
    /** 包含的文件扩展名 */
    include: string[];
    /** 排除的文件扩展名 */
    exclude?: string[];
    /** 最小文件大小（字节），小于此大小的文件不上传 */
    minSize?: number;
    /** 最大并发上传数 */
    maxConcurrency?: number;
    /** 文件路径前缀模板 */
    prefix?: string;
    /** CDN公网访问域名 */
    publicPath: string;
    /** 是否启用本地缓存 */
    cache?: boolean;
    /** 缓存文件路径 */
    cacheFile?: string;
    /** 开发模式下是否跳过上传 */
    dev?: boolean;
    /** 是否显示详细日志 */
    verbose?: boolean;
}
/**
 * 插件配置类型（由各个提供商配置组成联合类型）
 * Plugin Options Type (Union type of all provider configs)
 */
type PluginOptions = OSSConfig | COSConfig | S3Config | OBSConfig;
/**
 * 资源信息
 * Asset Information
 */
interface AssetInfo {
    filePath: string;
    fileName: string;
    fileSize: number;
    fileHash: string;
    mimeType: string;
}
/**
 * 上传结果
 * Upload Result
 */
interface UploadResult {
    success: boolean;
    filePath: string;
    url: string;
    size: number;
    error?: Error;
}

declare function createViteCloudPlugin(options: PluginOptions): Plugin;

declare const viteCloudUpload: typeof createViteCloudPlugin;
declare const viteOSSUpload: typeof createViteCloudPlugin;

export { CloudStorageFactory, CloudStorageProvider, createViteCloudPlugin, createViteCloudPlugin as createViteOSSPlugin, createViteCloudPlugin as default, viteCloudUpload, viteOSSUpload };
export type { AllCloudConfig, AssetInfo, COSConfig, CloudStorageConfig, OBSConfig, OSSConfig, PluginOptions, S3Config, UploadResult };
