/*!
 * Copyright 2021 WPPConnect Team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { Label } from '../../labels';
import { ChatModel, MsgKey, MsgModel, Wid } from '../../whatsapp';
export interface ChatEventTypes {
    /**
     * Triggered when change the active chat
     *
     * @example
     * ```javascript
     * WPP.on('chat.active_chat', (chat) => {
     *   // Your code
     * });
     * ```
     */
    'chat.active_chat': ChatModel | null;
    /**
     * Triggered when a new chat is created
     *
     * @example
     * ```javascript
     * WPP.on('chat.new_chat', (chat) => {
     *   // Your code
     * });
     * ```
     */
    'chat.new_chat': ChatModel;
    /**
     * Triggered when new message is received
     *
     * @example
     * ```javascript
     * WPP.on('chat.new_message', (msg) => {
     *   // Your code
     * });
     * ```
     */
    'chat.new_message': MsgModel;
    'chat.unread_count_changed': {
        /**
         * Chat that changed the unread count
         */
        chat: ChatModel;
        /**
         * Current unread messages count
         */
        unreadCount: number;
        /**
         * Previous unread messages count
         */
        previousUnreadCount: number;
    };
    'chat.msg_revoke': {
        /**
         * Author of message, only for groups
         */
        author?: Wid;
        from: Wid;
        /**
         * Message id of revoke event
         */
        id: MsgKey;
        /**
         * Message id of revoked message
         */
        refId: MsgKey;
        to: Wid;
        /**
         * Type of revoke
         */
        type: 'revoke' | 'sender_revoke' | 'admin_revoke';
    };
    'chat.msg_ack_change': {
        ack: number;
        /**
         * Who sended the ack, only for groups, broadcast and status
         */
        sender?: Wid;
        /**
         * The chat that sended the messeage
         */
        chat: Wid;
        /**
         * Message id of revoke event
         */
        ids: MsgKey[];
    };
    /**
     * On Message edit
     */
    'chat.msg_edited': {
        chat: Wid;
        id: string;
        msg: MsgModel;
    };
    'chat.live_location_start': {
        id: Wid;
        msgId: MsgKey;
        chat: Wid;
        lat: number;
        lng: number;
        accuracy?: number;
        speed?: number;
        degrees?: number;
        shareDuration: number;
    };
    /**
     * @deprecated Temporary unsuported by WhatsApp Web Multi-Device
     */
    'chat.live_location_update': {
        id: Wid;
        lastUpdated: number;
        elapsed: number;
        lat: number;
        lng: number;
        accuracy?: number;
        speed?: number;
        degrees?: number;
        comment: string;
    };
    /**
     * @deprecated Temporary unsuported by WhatsApp Web Multi-Device
     */
    'chat.live_location_end': {
        id: Wid;
        chat: Wid;
        seq: number;
    };
    /**
     * Triggered when a new reaction is received
     *
     * @example
     * ```javascript
     * WPP.on('chat.new_reaction', (msg) => {
     *   // Your code
     * });
     * ```
     */
    'chat.new_reaction': {
        /**
         * Reaction ID
         */
        id: MsgKey;
        /**
         * Message ID that received the reaction
         */
        msgId: MsgKey;
        /**
         * The reaction emoji or empty if removed
         */
        reactionText: string;
        read: boolean;
        sender: Wid;
        orphan: number;
        orphanReason: any;
        timestamp: number;
    };
    /**
     * On presence change
     */
    'chat.presence_change': {
        id: Wid;
        isOnline: boolean;
        isGroup: boolean;
        isUser: boolean;
        shortName: string;
        state: string;
        t: number;
        isContact?: boolean;
        participants?: {
            id: string;
            state: string;
            shortName: string;
        }[];
    };
    /**
     * On Poll response
     */
    'chat.poll_response': {
        msgId: MsgKey;
        chatId: Wid;
        selectedOptions: number[];
        timestamp: number;
        sender: Wid;
    };
    /**
     * On Labels update
     */
    'chat.update_label': {
        chat: ChatModel;
        ids: string[];
        labels: Label[];
        type: 'add' | 'remove';
    };
}
