/**
 * System Event Job Types
 * 100% khớp với automation-web system event jobs
 */
import { BaseZaloWebhookEvent, ZaloWebhookEventType, ZaloConnectionStatus, BaseQueueJob } from './webhook-job.types';
/**
 * Connection Status Event Data
 */
export interface ZaloConnectionStatusData {
    status: ZaloConnectionStatus;
    previousStatus?: ZaloConnectionStatus;
    timestamp: number;
    reason?: string;
    reconnectAttempts?: number;
    lastConnectedAt?: number;
    metadata?: Record<string, any>;
}
/**
 * Connection status event interfaces - 4 variants
 */
export interface ZaloConnectionStatusConnectedEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CONNECTION_STATUS_CONNECTED;
    data: ZaloConnectionStatusData & {
        status: ZaloConnectionStatus.CONNECTED;
    };
}
export interface ZaloConnectionStatusDisconnectedEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CONNECTION_STATUS_DISCONNECTED;
    data: ZaloConnectionStatusData & {
        status: ZaloConnectionStatus.DISCONNECTED;
    };
}
export interface ZaloConnectionStatusReconnectingEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CONNECTION_STATUS_RECONNECTING;
    data: ZaloConnectionStatusData & {
        status: ZaloConnectionStatus.RECONNECTING;
    };
}
export interface ZaloConnectionStatusLoggedOutEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CONNECTION_STATUS_LOGGED_OUT;
    data: ZaloConnectionStatusData & {
        status: ZaloConnectionStatus.LOGGED_OUT;
    };
}
/**
 * Union type for all connection status events
 */
export type ZaloConnectionStatusEvent = ZaloConnectionStatusConnectedEvent | ZaloConnectionStatusDisconnectedEvent | ZaloConnectionStatusReconnectingEvent | ZaloConnectionStatusLoggedOutEvent;
/**
 * Upload Attachment Event Data
 */
export interface ZaloUploadAttachmentData {
    attachmentId: string;
    fileName: string;
    fileSize: number;
    fileType: string;
    uploadUrl?: string;
    downloadUrl?: string;
    progress?: number;
    error?: string;
    timestamp: number;
    metadata?: Record<string, any>;
}
/**
 * Upload attachment event interfaces - 3 variants
 */
export interface ZaloUploadAttachmentInProgressEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.UPLOAD_ATTACHMENT_IN_PROGRESS;
    data: ZaloUploadAttachmentData & {
        progress: number;
    };
}
export interface ZaloUploadAttachmentCompletedEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.UPLOAD_ATTACHMENT_COMPLETED;
    data: ZaloUploadAttachmentData & {
        downloadUrl: string;
        progress: 100;
    };
}
export interface ZaloUploadAttachmentFailedEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.UPLOAD_ATTACHMENT_FAILED;
    data: ZaloUploadAttachmentData & {
        error: string;
    };
}
/**
 * Union type for all upload attachment events
 */
export type ZaloUploadAttachmentEvent = ZaloUploadAttachmentInProgressEvent | ZaloUploadAttachmentCompletedEvent | ZaloUploadAttachmentFailedEvent;
/**
 * Cipher Key Event Data
 */
export interface ZaloCipherKeyData {
    threadId: string;
    keyId: string;
    keyVersion: number;
    algorithm: string;
    expiresAt?: number;
    timestamp: number;
    metadata?: Record<string, any>;
}
/**
 * Cipher key event interfaces - 4 variants
 */
export interface ZaloCipherKeyUpdatedInUserEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CIPHER_KEY_UPDATED_IN_USER;
    data: ZaloCipherKeyData;
}
export interface ZaloCipherKeyUpdatedInGroupEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CIPHER_KEY_UPDATED_IN_GROUP;
    data: ZaloCipherKeyData;
}
export interface ZaloCipherKeyExpiredInUserEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CIPHER_KEY_EXPIRED_IN_USER;
    data: ZaloCipherKeyData;
}
export interface ZaloCipherKeyExpiredInGroupEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.CIPHER_KEY_EXPIRED_IN_GROUP;
    data: ZaloCipherKeyData;
}
/**
 * Union type for all cipher key events
 */
export type ZaloCipherKeyEvent = ZaloCipherKeyUpdatedInUserEvent | ZaloCipherKeyUpdatedInGroupEvent | ZaloCipherKeyExpiredInUserEvent | ZaloCipherKeyExpiredInGroupEvent;
/**
 * Error Event Data
 */
export interface ZaloErrorData {
    errorCode: string;
    errorMessage: string;
    errorStack?: string;
    context?: Record<string, any>;
    timestamp: number;
    severity: 'low' | 'medium' | 'high' | 'critical';
    recoverable: boolean;
    metadata?: Record<string, any>;
}
/**
 * Error event interfaces - 6 variants
 */
export interface ZaloErrorSystemEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.ERROR_SYSTEM;
    data: ZaloErrorData;
}
export interface ZaloErrorNetworkEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.ERROR_NETWORK;
    data: ZaloErrorData;
}
export interface ZaloErrorAuthenticationEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.ERROR_AUTHENTICATION;
    data: ZaloErrorData;
}
export interface ZaloErrorValidationEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.ERROR_VALIDATION;
    data: ZaloErrorData;
}
export interface ZaloErrorBusinessLogicEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.ERROR_BUSINESS_LOGIC;
    data: ZaloErrorData;
}
export interface ZaloErrorUnknownEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.ERROR_UNKNOWN;
    data: ZaloErrorData;
}
/**
 * Union type for all error events
 */
export type ZaloErrorEvent = ZaloErrorSystemEvent | ZaloErrorNetworkEvent | ZaloErrorAuthenticationEvent | ZaloErrorValidationEvent | ZaloErrorBusinessLogicEvent | ZaloErrorUnknownEvent;
/**
 * Old Messages Event Data
 */
export interface ZaloOldMessagesData {
    threadId: string;
    messages: Array<{
        messageId: string;
        content: string;
        timestamp: number;
        fromId: string;
        fromName: string;
    }>;
    totalCount: number;
    hasMore: boolean;
    timestamp: number;
}
/**
 * Old messages event interface
 */
export interface ZaloOldMessagesEvent extends BaseZaloWebhookEvent {
    eventType: ZaloWebhookEventType.OLD_MESSAGES;
    data: ZaloOldMessagesData;
}
/**
 * Union type for all system events
 */
export type ZaloSystemEvent = ZaloConnectionStatusEvent | ZaloUploadAttachmentEvent | ZaloCipherKeyEvent | ZaloErrorEvent | ZaloOldMessagesEvent;
/**
 * Connection Status Queue Job
 */
export interface ConnectionStatusQueueJob extends BaseQueueJob<ZaloConnectionStatusEvent> {
    name: 'connection-status-event';
    data: ZaloConnectionStatusEvent;
}
/**
 * Upload Attachment Queue Job
 */
export interface UploadAttachmentQueueJob extends BaseQueueJob<ZaloUploadAttachmentEvent> {
    name: 'upload-attachment-event';
    data: ZaloUploadAttachmentEvent;
}
/**
 * Cipher Key Queue Job
 */
export interface CipherKeyQueueJob extends BaseQueueJob<ZaloCipherKeyEvent> {
    name: 'cipher-key-event';
    data: ZaloCipherKeyEvent;
}
/**
 * Error Queue Job
 */
export interface ErrorQueueJob extends BaseQueueJob<ZaloErrorEvent> {
    name: 'error-event';
    data: ZaloErrorEvent;
}
/**
 * Old Messages Queue Job
 */
export interface OldMessagesQueueJob extends BaseQueueJob<ZaloOldMessagesEvent> {
    name: 'old-messages-event';
    data: ZaloOldMessagesEvent;
}
/**
 * Union type for all system queue jobs
 */
export type SystemQueueJobUnion = ConnectionStatusQueueJob | UploadAttachmentQueueJob | CipherKeyQueueJob | ErrorQueueJob | OldMessagesQueueJob;
//# sourceMappingURL=system-job.types.d.ts.map