import { WhatsAppEventType, EventPriority, EventStatus } from "./event-types";
/**
 * Interfaz base para todos los eventos del sistema WhatsApp
 */
export interface BaseWhatsAppEvent {
    /** Identificador único del evento */
    id?: string;
    /** ID del tenant (inmobiliaria) */
    tenantId: string;
    /** ID del agente */
    agentId: number;
    /** Tipo de evento */
    eventType: WhatsAppEventType;
    /** Clave de sesión única */
    sessionKey: string;
    /** Timestamp del evento */
    timestamp: number;
    /** Prioridad del evento para procesamiento */
    priority?: EventPriority;
    /** Estado del procesamiento */
    status?: EventStatus;
    /** Número de intentos de procesamiento */
    attempts?: number;
    /** Metadatos adicionales */
    metadata?: Record<string, any>;
}
/**
 * Evento de mensaje nuevo
 */
export interface MessageEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.MESSAGE_NEW;
    data: {
        messages: any[];
        chatId?: string;
        fromMe?: boolean;
    };
}
/**
 * Evento de actualización de mensaje
 */
export interface MessageUpdateEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.MESSAGE_UPDATE;
    data: {
        updates: any[];
        chatId?: string;
    };
}
/**
 * Evento de sincronización de historial
 */
export interface HistorySyncEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.HISTORY_SYNC | WhatsAppEventType.HISTORY_PARTIAL;
    data: {
        chats: any[];
        contacts: any[];
        messages: any[];
        isLatest?: boolean;
        progress?: number;
        syncType?: any;
        peerDataRequestSessionId?: string;
    };
}
/**
 * Evento de estado de conexión
 */
export interface ConnectionStatusEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.CONNECTION_STATUS;
    data: {
        connected: boolean;
        reason?: string;
        lastDisconnect?: any;
        qrCode?: string;
    };
}
/**
 * Evento de código QR generado
 */
export interface QRCodeEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.QR_CODE_GENERATED;
    data: {
        qrCode: string;
        timestamp: number;
    };
}
/**
 * Evento de notificación webhook
 */
export interface WebhookEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.WEBHOOK_NOTIFICATION;
    data: {
        webhookUrl: string;
        payload: any;
        retryCount?: number;
    };
}
/**
 * Evento de actualización de contacto
 */
export interface ContactUpdateEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.CONTACT_UPDATE;
    data: {
        contacts: any[];
        action: "create" | "update" | "delete";
    };
}
/**
 * Evento de actualización de conexión
 */
export interface ConnectionUpdateEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.CONNECTION_UPDATE;
    data: {
        connection: string;
        lastDisconnect?: any;
        qr?: any;
        timestamp: number;
    };
}
/**
 * Evento de actualización de presencia
 */
export interface PresenceUpdateEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.PRESENCE_UPDATE;
    data: {
        jid: string;
        presence: string;
        timestamp?: number;
    };
}
/**
 * Evento de inicio de escritura
 */
export interface TypingStartEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.TYPING_START;
    data: {
        jid: string;
        timestamp?: number;
    };
}
/**
 * Evento de fin de escritura
 */
export interface TypingStopEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.TYPING_STOP;
    data: {
        jid: string;
        timestamp?: number;
    };
}
/**
 * Evento de salud del sistema
 */
export interface SystemHealthEvent extends BaseWhatsAppEvent {
    eventType: WhatsAppEventType.SYSTEM_HEALTH;
    data: {
        status: string;
        metrics: any;
        timestamp: number;
    };
}
/**
 * Unión de todos los tipos de eventos
 */
export type WhatsAppEvent = MessageEvent | MessageUpdateEvent | HistorySyncEvent | ConnectionStatusEvent | QRCodeEvent | WebhookEvent | ContactUpdateEvent | ConnectionUpdateEvent | PresenceUpdateEvent | TypingStartEvent | TypingStopEvent | SystemHealthEvent;
/**
 * Configuración de procesamiento de eventos
 */
export interface EventProcessingConfig {
    /** Número máximo de intentos */
    maxAttempts: number;
    /** Delay entre intentos (en ms) */
    retryDelay: number;
    /** Timeout para procesamiento (en ms) */
    processingTimeout: number;
    /** Indica si el evento debe ser procesado en orden */
    ordered?: boolean;
}
/**
 * Resultado del procesamiento de un evento
 */
export interface EventProcessingResult {
    /** Indica si el procesamiento fue exitoso */
    success: boolean;
    /** Mensaje de resultado */
    message?: string;
    /** Datos resultantes del procesamiento */
    data?: any;
    /** Error si el procesamiento falló */
    error?: Error;
    /** Tiempo de procesamiento en ms */
    processingTime?: number;
}
/**
 * Interfaz para publishers de eventos
 */
export interface IEventPublisher {
    /** Publica un evento en la cola correspondiente */
    publishEvent(event: WhatsAppEvent, queueName?: string): Promise<void>;
    /** Publica múltiples eventos en batch */
    publishBatch(events: WhatsAppEvent[], queueName?: string): Promise<void>;
}
/**
 * Interfaz para handlers de eventos
 */
export interface IEventHandler {
    /** Procesa un evento específico */
    handleEvent(event: WhatsAppEvent): Promise<EventProcessingResult>;
    /** Indica si el handler puede procesar este tipo de evento */
    canHandle(eventType: WhatsAppEventType): boolean;
    /** Configura el handler */
    configure(config: EventProcessingConfig): void;
}
//# sourceMappingURL=event-interfaces.d.ts.map