import type { ViralutionElement } from "../..";
export interface DuplicationAnalysis {
    strategy: "BATCHING" | "INSTANCING" | "HYBRID";
    totalElements: number;
    totalInstances: number;
    totalVertices: number;
    uniqueGeometries: number;
    averageVerticesPerElement: number;
    averageInstancesPerGeometry: number;
    highDuplicationElements: Array<{
        element: ViralutionElement;
        vertexCount: number;
        instanceCount: number;
        totalVertexInstances: number;
        efficiencyScore: number;
    }>;
    lowDuplicationElements: Array<{
        element: ViralutionElement;
        vertexCount: number;
        instanceCount: number;
        totalVertexInstances: number;
        efficiencyScore: number;
    }>;
    estimatedDrawCalls: number;
    estimatedMemoryReduction: number;
    details: {
        batchedElements: number;
        batchedVertices: number;
        instancedElements: number;
        instancedVertices: number;
        instancedDrawCalls: number;
    };
}
declare class ViralDuplicationAnalyzer {
    private readonly MIN_VERTEX_INSTANCES_FOR_INSTANCING;
    private readonly MIN_INSTANCES_FOR_INSTANCING;
    private readonly MAX_DRAW_CALLS;
    private readonly MIN_INSTANCED_VERTEX_RATIO;
    private readonly HIGH_VERTEX_THRESHOLD;
    /**
     * Enhanced analysis considering vertex count × instance count
     */
    analyze(elements: ViralutionElement[]): DuplicationAnalysis;
    private calculateElementMetrics;
    private categorizeByEfficiency;
    private determineStrategy;
    private calculateDrawCalls;
    private calculateMemoryReduction;
    private calculateDetails;
    private logAnalysis;
    /**
     * Get elements that should be instanced vs batched with the new logic
     */
    categorizeElements(elements: ViralutionElement[]): {
        forInstancing: ViralutionElement[];
        forBatching: ViralutionElement[];
    };
    /**
     * Configure thresholds for vertex-aware analysis
     */
    setThresholds(config: {
        minVertexInstancesForInstancing?: number;
        minInstancesForInstancing?: number;
        maxDrawCalls?: number;
        minInstancedVertexRatio?: number;
        highVertexThreshold?: number;
    }): void;
    /**
     * Get a detailed recommendation with vertex information
     */
    getDetailedRecommendation(elements: ViralutionElement[]): string;
}
export declare const viralDuplicationAnalyzer: ViralDuplicationAnalyzer;
export {};
