/**
 * Express Upload Middleware
 *
 * Express.js integration with Multer for file uploads
 * Extracted from Holy Habit Express integration
 */
import { Request, Response, NextFunction } from 'express';
import { UploadHandler } from './UploadHandler';
import { UploadConfig, UploadMiddlewareOptions, UploadResult, MultipleUploadResult } from '../types/Upload';
declare global {
    namespace Express {
        interface Request {
            uploadHandler?: UploadHandler;
            uploadSingle?: () => Promise<UploadResult>;
            uploadMultiple?: () => Promise<MultipleUploadResult>;
            getUserId?: () => string | undefined;
        }
    }
}
export declare class ExpressUploadMiddleware {
    private uploadHandler;
    private multerInstance;
    constructor(config?: Partial<UploadConfig>);
    /**
     * Create Multer instance with configuration
     */
    private createMulterInstance;
    /**
     * Single file upload middleware
     *
     * @param fieldName - Field name for file input
     * @param options - Upload options
     * @returns Express middleware
     */
    single(fieldName?: string, options?: UploadMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => void;
    /**
     * Multiple files upload middleware
     *
     * @param fieldName - Field name for file input
     * @param maxCount - Maximum number of files
     * @param options - Upload options
     * @returns Express middleware
     */
    multiple(fieldName?: string, maxCount?: number, options?: UploadMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => void;
    /**
     * Fields upload middleware (mixed uploads)
     *
     * @param fields - Array of field configurations
     * @param options - Upload options
     * @returns Express middleware
     */
    fields(fields: {
        name: string;
        maxCount?: number;
    }[], options?: UploadMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => void;
    /**
     * Create upload route handler
     *
     * @param type - Upload type ('single' or 'multiple')
     * @param fieldName - Field name
     * @param options - Upload options
     * @returns Express route handler
     */
    createUploadRoute(type?: 'single' | 'multiple', fieldName?: string, options?: UploadMiddlewareOptions): (req: Request, res: Response) => Promise<void>;
    /**
     * Create complete upload endpoint with middleware
     *
     * @param type - Upload type
     * @param fieldName - Field name
     * @param options - Upload options
     * @returns Array of middleware functions
     */
    createCompleteEndpoint(type?: 'single' | 'multiple', fieldName?: string, options?: UploadMiddlewareOptions): [(req: Request, res: Response, next: NextFunction) => void, (req: Request, res: Response) => Promise<void>];
    /**
     * Create file serving middleware
     *
     * @param urlPath - URL path for files (e.g., '/uploads')
     * @returns Express middleware
     */
    static createFileServing(urlPath?: string): (req: Request, res: Response, next: NextFunction) => void;
    /**
     * Create delete endpoint
     *
     * @returns Express route handler
     */
    createDeleteEndpoint(): (req: Request, res: Response) => Promise<void>;
    /**
     * Create storage info endpoint
     *
     * @returns Express route handler
     */
    createStorageInfoEndpoint(): (req: Request, res: Response) => Promise<void>;
    /**
     * Attach upload methods to request object
     */
    private attachUploadMethods;
    /**
     * Extract user ID from request
     */
    private extractUserId;
    /**
     * Handle Multer errors
     */
    private handleMulterError;
    /**
     * Handle general errors
     */
    private handleError;
    /**
     * Get upload handler instance
     */
    getUploadHandler(): UploadHandler;
    /**
     * Update configuration
     */
    updateConfig(config: Partial<UploadConfig>): void;
}
//# sourceMappingURL=ExpressUploadMiddleware.d.ts.map