/**
 * Message Event Types
 *
 * All message-related webhook events (44 total).
 * Includes text, media, file, and social message events.
 */
import { ZaloMessageEvent, ZaloMessageEventData, ZaloLinkPreview } from './base';
import { TextMessageEventType, LinkMessageEventType, ImageMessageEventType, VideoMessageEventType, VoiceMessageEventType, GifMessageEventType, FileMessageEventType, StickerMessageEventType, LocationMessageEventType, DoodleMessageEventType, GenericMessageEventType, ZaloMessageCategory, ZaloMessageType } from '../enums';
import { ZaloImageContent, ZaloVideoContent, ZaloVoiceContent, ZaloFileContent, ZaloGifContent, ZaloDoodleContent, ZaloStickerContent, ZaloLocationContent } from './content';
/**
 * Text message event
 * Triggered for plain text messages
 */
export interface ZaloTextMessageEvent extends ZaloMessageEvent {
    eventType: TextMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.WEBCHAT;
        content: string;
        messageType: ZaloMessageType.WEBCHAT;
        messageCategory: ZaloMessageCategory.TEXT;
        hasAttachment: false;
    };
}
/**
 * Link message event
 * Triggered for messages containing URLs
 */
export interface ZaloLinkMessageEvent extends ZaloMessageEvent {
    eventType: LinkMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.LINK;
        content: string;
        messageType: ZaloMessageType.LINK;
        messageCategory: ZaloMessageCategory.TEXT;
        hasAttachment: false;
        links?: ZaloLinkPreview[];
    };
}
/**
 * Image message event
 * Triggered for image attachments
 */
export interface ZaloImageMessageEvent extends ZaloMessageEvent {
    eventType: ImageMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.PHOTO;
        content: ZaloImageContent;
        messageType: ZaloMessageType.PHOTO;
        messageCategory: ZaloMessageCategory.MEDIA;
        hasAttachment: true;
    };
}
/**
 * Video message event
 * Triggered for video attachments
 */
export interface ZaloVideoMessageEvent extends ZaloMessageEvent {
    eventType: VideoMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.VIDEO;
        content: ZaloVideoContent;
        messageType: ZaloMessageType.VIDEO;
        messageCategory: ZaloMessageCategory.MEDIA;
        hasAttachment: true;
    };
}
/**
 * Voice message event
 * Triggered for voice recordings
 */
export interface ZaloVoiceMessageEvent extends ZaloMessageEvent {
    eventType: VoiceMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.VOICE;
        content: ZaloVoiceContent;
        messageType: ZaloMessageType.VOICE;
        messageCategory: ZaloMessageCategory.MEDIA;
        hasAttachment: true;
    };
}
/**
 * GIF message event
 * Triggered for animated GIF attachments
 */
export interface ZaloGifMessageEvent extends ZaloMessageEvent {
    eventType: GifMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.GIF;
        content: ZaloGifContent;
        messageType: ZaloMessageType.GIF;
        messageCategory: ZaloMessageCategory.MEDIA;
        hasAttachment: true;
    };
}
/**
 * Doodle message event
 * Triggered for hand-drawn doodles
 */
export interface ZaloDoodleMessageEvent extends ZaloMessageEvent {
    eventType: DoodleMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.DOODLE;
        content: ZaloDoodleContent;
        messageType: ZaloMessageType.DOODLE;
        messageCategory: ZaloMessageCategory.MEDIA;
        hasAttachment: true;
    };
}
/**
 * File message event
 * Triggered for file attachments
 */
export interface ZaloFileMessageEvent extends ZaloMessageEvent {
    eventType: FileMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.FILE;
        content: ZaloFileContent;
        messageType: ZaloMessageType.FILE;
        messageCategory: ZaloMessageCategory.FILE;
        hasAttachment: true;
    };
}
/**
 * Sticker message event
 * Triggered for sticker/emoji messages
 */
export interface ZaloStickerMessageEvent extends ZaloMessageEvent {
    eventType: StickerMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.STICKER;
        content: string | ZaloStickerContent;
        messageType: ZaloMessageType.STICKER;
        messageCategory: ZaloMessageCategory.SOCIAL;
        hasAttachment: false;
    };
}
/**
 * Location message event
 * Triggered for location sharing
 */
export interface ZaloLocationMessageEvent extends ZaloMessageEvent {
    eventType: LocationMessageEventType;
    data: ZaloMessageEventData & {
        msgType: ZaloMessageType.LOCATION;
        content: ZaloLocationContent;
        messageType: ZaloMessageType.LOCATION;
        messageCategory: ZaloMessageCategory.SOCIAL;
        hasAttachment: false;
    };
}
/**
 * Generic message event
 * Fallback for unrecognized message types
 */
export interface ZaloGenericMessageEvent extends ZaloMessageEvent {
    eventType: GenericMessageEventType;
    data: ZaloMessageEventData & {
        content: string | object;
        hasAttachment: boolean;
    };
}
/**
 * All text category message events
 */
export type ZaloTextCategoryEvent = ZaloTextMessageEvent | ZaloLinkMessageEvent;
/**
 * All media category message events
 */
export type ZaloMediaCategoryEvent = ZaloImageMessageEvent | ZaloVideoMessageEvent | ZaloVoiceMessageEvent | ZaloGifMessageEvent | ZaloDoodleMessageEvent;
/**
 * All file category message events
 */
export type ZaloFileCategoryEvent = ZaloFileMessageEvent;
/**
 * All social category message events
 */
export type ZaloSocialCategoryEvent = ZaloStickerMessageEvent | ZaloLocationMessageEvent;
/**
 * All message events with attachments
 */
export type ZaloAttachmentMessageEvent = ZaloImageMessageEvent | ZaloVideoMessageEvent | ZaloVoiceMessageEvent | ZaloGifMessageEvent | ZaloDoodleMessageEvent | ZaloFileMessageEvent;
/**
 * All message events without attachments
 */
export type ZaloNonAttachmentMessageEvent = ZaloTextMessageEvent | ZaloLinkMessageEvent | ZaloStickerMessageEvent | ZaloLocationMessageEvent;
/**
 * Union of all message events (44 total)
 */
export type ZaloAllMessageEvents = ZaloTextCategoryEvent | ZaloMediaCategoryEvent | ZaloFileCategoryEvent | ZaloSocialCategoryEvent | ZaloGenericMessageEvent;
/**
 * Message events by direction
 */
export type ZaloSentMessageEvent = ZaloAllMessageEvents & {
    data: {
        isSelf: true;
    };
};
export type ZaloReceivedMessageEvent = ZaloAllMessageEvents & {
    data: {
        isSelf: false;
    };
};
/**
 * Message events by thread type
 */
export type ZaloUserMessageEvent = ZaloAllMessageEvents & {
    data: {
        threadType: "user";
    };
};
export type ZaloGroupMessageEvent = ZaloAllMessageEvents & {
    data: {
        threadType: "group";
    };
};
//# sourceMappingURL=message-events.d.ts.map