/**
 * Webhook management service
 */
import { HttpClient } from '../../utils/http.utils';
import { AutomationWebResponse } from '../../types/common.types';
import { Message, Typing, Reaction, SeenMessage, DeliveredMessage, FriendEvent, GroupEvent, Undo } from '../../types/webhook';
/**
 * Webhook listener options
 */
export interface WebhookListenerOptions {
    /**
     * Enable self listen for own messages
     * @default false
     */
    selfListen?: boolean;
    /**
     * Enable debug logging
     * @default false
     */
    logging?: boolean;
    /**
     * Auto reconnect on disconnect
     * @default true
     */
    autoReconnect?: boolean;
    /**
     * Reconnect delay in milliseconds
     * @default 5000
     */
    reconnectDelay?: number;
}
/**
 * Start webhook listener request
 */
export interface StartWebhookListenerRequest {
    /**
     * Session ID
     */
    sessionId: string;
    /**
     * Webhook listener options
     */
    options?: WebhookListenerOptions;
}
/**
 * Stop webhook listener request
 */
export interface StopWebhookListenerRequest {
    /**
     * Session ID
     */
    sessionId: string;
}
/**
 * Webhook listener status
 */
export type WebhookListenerStatus = 'active' | 'inactive' | 'error' | 'connecting';
/**
 * Webhook listener status response
 */
export interface WebhookListenerStatusResponse {
    /**
     * Session ID
     */
    sessionId: string;
    /**
     * Current status
     */
    status: WebhookListenerStatus;
    /**
     * Error message if status is error
     */
    error?: string;
    /**
     * Timestamp when connected
     */
    connectedAt?: number;
    /**
     * Timestamp of last event
     */
    lastEventAt?: number;
    /**
     * Total event count
     */
    eventCount?: number;
}
/**
 * Webhook statistics
 */
export interface WebhookStatistics {
    /**
     * Session ID
     */
    sessionId: string;
    /**
     * Total events processed
     */
    totalEvents: number;
    /**
     * Events processed today
     */
    eventsToday: number;
    /**
     * Last event timestamp
     */
    lastEventTimestamp: number;
    /**
     * Events count by type
     */
    eventsByType: Record<string, number>;
    /**
     * Queue statistics
     */
    queueStats: {
        waiting: number;
        active: number;
        completed: number;
        failed: number;
    };
}
/**
 * Webhook event response
 */
export interface WebhookEventResponse {
    /**
     * Event ID
     */
    eventId: string;
    /**
     * Session ID
     */
    sessionId: string;
    /**
     * Event type
     */
    eventType: string;
    /**
     * Event timestamp
     */
    timestamp: number;
    /**
     * Processing status
     */
    status: 'queued' | 'processing' | 'completed' | 'failed';
    /**
     * Job ID for tracking
     */
    jobId?: string;
    /**
     * Error message if failed
     */
    error?: string;
}
/**
 * Response DTO cho validate session
 */
export interface ValidateSessionResponse {
    sessionId: string;
    isValid: boolean;
    status: string;
    lastActivity?: number;
    errors?: string[];
}
/**
 * Response DTO cho validate all sessions
 */
export interface ValidateAllSessionsResponse {
    totalSessions: number;
    validSessions: number;
    invalidSessions: number;
    results: ValidateSessionResponse[];
}
/**
 * Response DTO cho cleanup expired sessions
 */
export interface CleanupExpiredSessionsResponse {
    cleanupCount: number;
    expiredSessions: string[];
    message: string;
}
/**
 * Webhook Event Handlers
 */
export interface WebhookEventHandlers {
    /**
     * Message received handler
     */
    onMessage?: (event: Message) => void;
    /**
     * Typing event handler
     */
    onTyping?: (event: Typing) => void;
    /**
     * Reaction event handler
     */
    onReaction?: (event: Reaction) => void;
    /**
     * Message seen handler
     */
    onMessageSeen?: (event: SeenMessage) => void;
    /**
     * Message delivered handler
     */
    onMessageDelivered?: (event: DeliveredMessage) => void;
    /**
     * Friend event handler
     */
    onFriendEvent?: (event: FriendEvent) => void;
    /**
     * Group event handler
     */
    onGroupEvent?: (event: GroupEvent) => void;
    /**
     * Message undo handler
     */
    onUndo?: (event: Undo) => void;
    /**
     * Generic event handler for unknown events
     */
    onUnknownEvent?: (eventType: string, data: any) => void;
    /**
     * Error handler
     */
    onError?: (error: Error) => void;
    /**
     * Connection status handler
     */
    onConnectionChange?: (status: 'connected' | 'disconnected' | 'reconnecting') => void;
}
/**
 * Webhook management service class
 */
export declare class WebhookService {
    private httpClient;
    constructor(httpClient: HttpClient);
    /**
     * Start webhook listener for a session
     */
    startWebhookListener(request: StartWebhookListenerRequest): Promise<WebhookListenerStatusResponse>;
    /**
     * Stop webhook listener for a session
     */
    stopWebhookListener(request: StopWebhookListenerRequest): Promise<WebhookListenerStatusResponse>;
    /**
     * Get webhook listener status for a session
     */
    getWebhookListenerStatus(sessionId: string): Promise<WebhookListenerStatusResponse>;
    /**
     * Get webhook statistics for a session
     */
    getWebhookStatistics(sessionId: string): Promise<WebhookStatistics>;
    /**
     * Get all active webhook listeners
     */
    getActiveWebhookListeners(): Promise<{
        activeListeners: string[];
        count: number;
    }>;
    /**
     * Restart webhook listener for a session
     */
    restartWebhookListener(sessionId: string, options?: WebhookListenerOptions): Promise<WebhookListenerStatusResponse>;
    /**
     * Check if webhook listener is active
     */
    isWebhookListenerActive(sessionId: string): Promise<boolean>;
    /**
     * Get webhook health status
     */
    getWebhookHealth(): Promise<{
        status: 'healthy' | 'unhealthy';
        activeListeners: number;
        totalEvents: number;
        queueHealth: {
            waiting: number;
            active: number;
            failed: number;
        };
    }>;
    /**
     * Stop all webhook listeners
     */
    stopAllWebhookListeners(): Promise<{
        stoppedListeners: string[];
        count: number;
    }>;
    /**
     * Validate session
     * GET /webhook/validate/:sessionId
     */
    validateSession(sessionId: string): Promise<AutomationWebResponse<ValidateSessionResponse>>;
    /**
     * Validate all sessions
     * POST /webhook/validate-all
     */
    validateAllSessions(): Promise<AutomationWebResponse<ValidateAllSessionsResponse>>;
    /**
     * Cleanup expired sessions
     * DELETE /webhook/cleanup-expired
     */
    cleanupExpiredSessions(): Promise<AutomationWebResponse<CleanupExpiredSessionsResponse>>;
}
//# sourceMappingURL=webhook.service.d.ts.map