import { RedisClient } from "../../config/redis-config";
import { WhatsAppEventType } from "../../events/types/event-types";
import { WhatsAppEvent } from "../../events/types/event-interfaces";
export interface PubSubOptions {
    subscriberPoolSize?: number;
    enableRetry?: boolean;
    retryAttempts?: number;
}
export interface NotificationData {
    type: 'notification' | 'broadcast' | 'alert';
    event: WhatsAppEventType;
    data: any;
    timestamp: number;
    source: string;
}
/**
 * Sistema Pub/Sub para notificaciones en tiempo real
 * Complementa BullMQ para eventos no críticos que requieren baja latencia
 */
export declare class WhatsAppPubSubSystem {
    private publisher;
    private subscribers;
    private subscriberPool;
    private activeSubscriptions;
    private options;
    constructor(redisClient: RedisClient, options?: PubSubOptions);
    /**
     * Inicializa el pool de suscriptores para distribuir la carga
     */
    private initializeSubscriberPool;
    /**
     * Publica un evento para notificaciones en tiempo real
     */
    publishEvent(event: WhatsAppEvent): Promise<number>;
    /**
     * Publica una notificación específica para la UI
     */
    publishNotification(event: WhatsAppEvent): Promise<void>;
    /**
     * Suscribirse a un patrón de canales
     */
    subscribe(pattern: string, handler: (channel: string, event: WhatsAppEvent) => Promise<void>): Promise<void>;
    /**
     * Suscribirse a notificaciones de un tenant/agente específico
     */
    subscribeToNotifications(tenantId: string, agentId: number, callback: (notification: NotificationData) => void): Promise<void>;
    /**
     * Broadcast a todos los usuarios de un tenant
     */
    broadcastToTenant(tenantId: string, data: any): Promise<void>;
    /**
     * Obtiene estadísticas del sistema Pub/Sub
     */
    getStats(): Promise<any>;
    /**
     * Desconectar una suscripción específica
     */
    unsubscribe(tenantId: string, agentId: number): Promise<void>;
    /**
     * Cerrar todas las conexiones
     */
    shutdown(): Promise<void>;
    /**
     * Obtiene el canal apropiado para un tipo de evento
     */
    private getChannelForEvent;
    /**
     * Obtiene un suscriptor disponible del pool
     */
    private getAvailableSubscriber;
}
//# sourceMappingURL=whatsapp-pubsub.d.ts.map