import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { EventSystemService } from './event-system.service';
export declare class EventDiscoveryService implements OnModuleInit, OnModuleDestroy {
    private readonly eventSystemService;
    private readonly reflector;
    private readonly logger;
    private readonly metadataScanner;
    private consumer;
    private autoRegisteredServices;
    private discoveryQueue;
    private isInitialized;
    private discoveryTimer;
    private isProcessing;
    private retryAttempts;
    private readonly maxRetries;
    private readonly baseRetryDelay;
    constructor(eventSystemService: EventSystemService, reflector: Reflector);
    onModuleInit(): Promise<void>;
    onModuleDestroy(): Promise<void>;
    private cleanup;
    /**
     * Start discovery loop only when there are pending services
     * Uses event-driven approach instead of continuous polling
     */
    private startDiscoveryLoop;
    /**
     * Stop discovery loop when no services are pending
     */
    private stopDiscoveryLoop;
    /**
     * Process the discovery queue with optimized batching and error handling
     */
    private processDiscoveryQueue;
    /**
     * Handle failed services with exponential backoff retry logic
     */
    private handleFailedServices;
    /**
     * Utility method to chunk array into batches
     */
    private chunkArray;
    /**
     * Add a service to be auto-registered when the event system is ready
     * This is the main entry point for automatic discovery
     */
    addServiceForAutoRegistration(instance: any): void;
    /**
     * Manually trigger registration of all pending services
     * This can be called by the EventModuleScanner
     */
    triggerRegistration(): Promise<void>;
    /**
     * Get discovery statistics
     */
    getDiscoveryStats(): {
        pending: number;
        registered: number;
        queueLength: number;
        retryCount: number;
    };
    private getConsumer;
    private initializeConsumer;
    /**
     * Register a single event handler with explicit metadata
     * This method is used by the EventModuleScanner for automatic discovery
     */
    registerHandler(instance: any, methodKey: string, metadata: {
        eventType: string;
        priority?: number;
        async?: boolean;
        retry?: any;
        [key: string]: any;
    }): Promise<void>;
    /**
     * Manually register event handlers from a service instance
     * This method can be called by services that want to register their handlers
     */
    registerEventHandlers(instance: any): Promise<number>;
    /**
     * Auto-register a service if it has @AutoEvents decorator
     * This method is called automatically by the service lifecycle
     */
    autoRegisterService(instance: any): Promise<number>;
}
