/**
 * Upload Handler
 *
 * Main handler for file upload operations
 * Extracted from Holy Habit upload system
 */
import { UploadConfig, UploadResult, MultipleUploadResult, UploadedFile, ValidationOptions, ImageOptimizationOptions, StorageInfo, CleanupResult, FileCleanupOptions } from '../types/Upload';
export declare class UploadHandler {
    private config;
    private uploadDir;
    constructor(config?: Partial<UploadConfig>);
    /**
     * Upload single file
     *
     * @param file - Multer file object
     * @param userId - User ID (optional)
     * @param options - Upload options
     * @returns Upload result
     */
    uploadSingle(file: Express.Multer.File, userId?: string, options?: {
        validation?: ValidationOptions;
        optimization?: ImageOptimizationOptions;
        prefix?: string;
    }): Promise<UploadResult>;
    /**
     * Upload multiple files
     *
     * @param files - Array of Multer file objects
     * @param userId - User ID (optional)
     * @param options - Upload options
     * @returns Multiple upload result
     */
    uploadMultiple(files: Express.Multer.File[], userId?: string, options?: {
        validation?: ValidationOptions;
        optimization?: ImageOptimizationOptions;
        prefix?: string;
        continueOnError?: boolean;
    }): Promise<MultipleUploadResult>;
    /**
     * Delete uploaded file
     *
     * @param filename - Filename to delete
     * @param userId - User ID (for security check)
     * @returns True if deleted successfully
     */
    deleteFile(filename: string, userId?: string): Promise<boolean>;
    /**
     * Get file information
     *
     * @param filename - Filename
     * @returns File information or null if not found
     */
    getFileInfo(filename: string): Promise<UploadedFile | null>;
    /**
     * Get storage information
     *
     * @param userId - User ID (optional, for user-specific stats)
     * @returns Storage information
     */
    getStorageInfo(userId?: string): Promise<StorageInfo>;
    /**
     * Clean up old files
     *
     * @param options - Cleanup options
     * @returns Cleanup result
     */
    cleanupFiles(options?: FileCleanupOptions): Promise<CleanupResult>;
    /**
     * Generate thumbnails for image
     *
     * @param filename - Image filename
     * @param sizes - Thumbnail sizes
     * @returns Generated thumbnails
     */
    generateThumbnails(filename: string, sizes?: {
        width: number;
        height: number;
        suffix: string;
    }[]): Promise<{
        path: string;
        width: number;
        height: number;
        size: number;
    }[]>;
    /**
     * Convert image to WebP
     *
     * @param filename - Original filename
     * @param quality - WebP quality
     * @returns Conversion result
     */
    convertToWebP(filename: string, quality?: number): Promise<{
        success: boolean;
        webpFilename?: string;
        originalSize: number;
        webpSize: number;
        savings: number;
    }>;
    /**
     * Get user files
     *
     * @param userId - User ID
     * @returns Array of user files
     */
    private getUserFiles;
    /**
     * Check if file is an image
     *
     * @param mimeType - MIME type
     * @returns True if image
     */
    private isImageFile;
    /**
     * Get file URL
     *
     * @param filename - Filename
     * @returns File URL
     */
    private getFileUrl;
    /**
     * Update configuration
     *
     * @param config - New configuration
     */
    updateConfig(config: Partial<UploadConfig>): void;
    /**
     * Get current configuration
     *
     * @returns Current configuration
     */
    getConfig(): UploadConfig;
    /**
     * Health check for upload system
     *
     * @returns Health status
     */
    healthCheck(): Promise<{
        healthy: boolean;
        issues: string[];
        storageInfo: StorageInfo;
    }>;
}
//# sourceMappingURL=UploadHandler.d.ts.map