import { WhatsAppMessageQueue } from "../../infrastructure/message-queue/redis-queue";
import { WhatsAppEvent, IEventPublisher } from "../types/event-interfaces";
import { QueueName } from "../types/event-types";
/**
 * Publisher principal para eventos de WhatsApp
 */
export declare class EventPublisher implements IEventPublisher {
    private messageQueue;
    constructor(messageQueue: WhatsAppMessageQueue);
    /**
     * Publica un evento en la cola correspondiente
     */
    publishEvent(event: WhatsAppEvent, queueName?: QueueName): Promise<void>;
    /**
     * Publica múltiples eventos en batch
     */
    publishBatch(events: WhatsAppEvent[], queueName?: QueueName): Promise<void>;
    /**
     * Publica evento de mensajes nuevos recibidos
     */
    publishMessageReceived(tenantId: string, agentId: number, messages: any[]): Promise<void>;
    /**
     * Publica evento de actualización de mensajes
     */
    publishMessageUpdates(tenantId: string, agentId: number, updates: any[]): Promise<void>;
    /**
     * Publica evento de sincronización de historial
     */
    publishHistorySync(tenantId: string, agentId: number, historyData: any, isPartial?: boolean): Promise<void>;
    /**
     * Publica evento de estado de conexión
     */
    publishConnectionStatus(tenantId: string, agentId: number, connected: boolean, reason?: string, qrCode?: string): Promise<void>;
    /**
     * Publica evento de código QR generado
     */
    publishQRCodeGenerated(tenantId: string, agentId: number, qrCode: string): Promise<void>;
    /**
     * Publica evento de notificación webhook
     */
    publishWebhookNotification(tenantId: string, agentId: number, webhookUrl: string, payload: any, retryCount?: number): Promise<void>;
    /**
     * Publica evento de actualización de contactos
     */
    publishContactUpdate(tenantId: string, agentId: number, contacts: any[], action?: "create" | "update" | "delete"): Promise<void>;
    /**
     * Publica múltiples eventos de mensajes nuevos en batch
     */
    publishMessageBatch(events: Array<{
        tenantId: string;
        agentId: number;
        messages: any[];
    }>): Promise<void>;
    /**
     * Genera clave de sesión única
     */
    private getSessionKey;
}
//# sourceMappingURL=event-publisher.d.ts.map