/**
 * Microservizio per analizzare e determinare il tipo di elaborazione per le immagini
 */
import { ImageUrlInfo } from './image-url-extractor';
import { ImageDescription } from './description-generator';
export interface ProcessingPlan {
    imageId: string;
    processingType: 'generate' | 'resize' | 'crop' | 'reuse';
    sourceImageId?: string;
    targetDimensions: {
        width: number;
        height: number;
    };
    cropRegion?: {
        x: number;
        y: number;
        width: number;
        height: number;
    };
    description: ImageDescription;
    priority: number;
    estimatedCost: number;
}
export interface ProcessingGroup {
    masterImageId: string;
    description: ImageDescription;
    targetDimensions: {
        width: number;
        height: number;
    };
    variants: ProcessingPlan[];
    totalCost: number;
}
export interface OptimizationResult {
    groups: ProcessingGroup[];
    totalImages: number;
    generatedImages: number;
    resizedImages: number;
    croppedImages: number;
    reusedImages: number;
    estimatedSavings: number;
}
export declare class ImageProcessingAnalyzer {
    private static readonly SIMILARITY_THRESHOLD;
    private static readonly MIN_RESIZE_RATIO;
    private static readonly MAX_RESIZE_RATIO;
    private static readonly CROP_EFFICIENCY_THRESHOLD;
    /**
     * Analizza e crea un piano di elaborazione ottimizzato
     */
    static createProcessingPlan(images: ImageUrlInfo[], descriptions: Map<string, ImageDescription>): OptimizationResult;
    /**
     * Raggruppa immagini per similarità di contenuto
     */
    private static groupBySimilarity;
    /**
     * Calcola similarità tra descrizioni
     */
    private static calculateDescriptionSimilarity;
    /**
     * Calcola similarità tra contesti
     */
    private static calculateContextSimilarity;
    /**
     * Calcola similarità tra stringhe
     */
    private static calculateStringSimilarity;
    /**
     * Calcola distanza di Levenshtein
     */
    private static levenshteinDistance;
    /**
     * Ottimizza un gruppo di immagini simili
     */
    private static optimizeGroup;
    /**
     * Seleziona l'immagine master da un gruppo
     */
    private static selectMasterImage;
    /**
     * Crea piano per una variante basata sull'immagine master
     */
    private static createVariantPlan;
    /**
     * Verifica se un'immagine può essere ritagliata efficacemente
     */
    private static canCropEfficiently;
    /**
     * Calcola ritaglio ottimale
     */
    private static calculateOptimalCrop;
    /**
     * Calcola priorità di elaborazione
     */
    private static calculatePriority;
    /**
     * Calcola risultato di ottimizzazione
     */
    private static calculateOptimizationResult;
    /**
     * Ordina gruppi per priorità di elaborazione
     */
    static sortGroupsByPriority(groups: ProcessingGroup[]): ProcessingGroup[];
    /**
     * Filtra piani per tipo di elaborazione
     */
    static filterPlansByType(groups: ProcessingGroup[], type: ProcessingPlan['processingType']): ProcessingPlan[];
    /**
     * Statistiche di ottimizzazione
     */
    static getOptimizationStats(result: OptimizationResult): {
        summary: string;
        breakdown: Record<string, number>;
        efficiencyScore: number;
    };
}
//# sourceMappingURL=image-processing-analyzer.d.ts.map