import { StorageConfig, Document } from "../contexts/ChatbotContext";
export interface FileMetadata {
    originalName: string;
    size: number;
    type: string;
    uploadedAt: Date;
    description?: string;
    tags?: string[];
    extractedText?: string;
    processingStatus: "pending" | "processing" | "completed" | "failed";
}
export interface StorageUploadProgress {
    fileId: string;
    progress: number;
    status: "uploading" | "processing" | "completed" | "failed";
    error?: string;
}
export interface UploadOptions {
    description?: string;
    tags?: string[];
    extractText?: boolean;
    overwrite?: boolean;
}
export declare abstract class BaseStorage {
    protected config: StorageConfig;
    protected isConnected: boolean;
    constructor(config: StorageConfig);
    abstract connect(): Promise<void>;
    abstract disconnect(): Promise<void>;
    abstract uploadFile(file: File, options?: UploadOptions): Promise<Document>;
    abstract downloadFile(documentId: string): Promise<Blob>;
    abstract deleteFile(documentId: string): Promise<void>;
    abstract listFiles(): Promise<Document[]>;
    abstract getFileMetadata(documentId: string): Promise<FileMetadata>;
    abstract healthCheck(): Promise<boolean>;
    getStatus(): {
        isConnected: boolean;
        config: StorageConfig;
    };
    updateConfig(updates: Partial<StorageConfig>): void;
}
export declare class SupabaseStorage extends BaseStorage {
    private client;
    private progressCallbacks;
    constructor(config: StorageConfig);
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    uploadFile(file: File, options?: UploadOptions): Promise<Document>;
    downloadFile(documentId: string): Promise<Blob>;
    deleteFile(documentId: string): Promise<void>;
    listFiles(): Promise<Document[]>;
    getFileMetadata(documentId: string): Promise<FileMetadata>;
    healthCheck(): Promise<boolean>;
    setProgressCallback(fileId: string, callback: (progress: StorageUploadProgress) => void): void;
    removeProgressCallback(fileId: string): void;
    private updateProgress;
    private validateFile;
    private extractTextFromFile;
}
export declare class LocalStorage extends BaseStorage {
    private files;
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    uploadFile(file: File, options?: UploadOptions): Promise<Document>;
    downloadFile(documentId: string): Promise<Blob>;
    deleteFile(documentId: string): Promise<void>;
    listFiles(): Promise<Document[]>;
    getFileMetadata(documentId: string): Promise<FileMetadata>;
    healthCheck(): Promise<boolean>;
    private validateFile;
}
export declare function createStorage(config: StorageConfig): BaseStorage;
export declare class StorageUtils {
    static validateConfig(config: StorageConfig): boolean;
    static getDefaultConfig(): Partial<StorageConfig>;
    static formatFileSize(bytes: number): string;
    static getFileExtension(filename: string): string;
    static generateUniqueFileName(originalName: string): string;
    static isTextFile(mimeType: string): boolean;
    static isSupportedFileType(mimeType: string, allowedTypes?: string[]): boolean;
}
declare const _default: {
    BaseStorage: typeof BaseStorage;
    SupabaseStorage: typeof SupabaseStorage;
    LocalStorage: typeof LocalStorage;
    createStorage: typeof createStorage;
    StorageUtils: typeof StorageUtils;
};
export default _default;
//# sourceMappingURL=storageService.d.ts.map