/**
 * Message related types and interfaces
 */
/**
 * Base message interface
 */
export interface BaseMessage {
    /**
     * Message type
     */
    type: string;
}
/**
 * Text message
 */
export interface TextMessage extends BaseMessage {
    type: "text";
    text: string;
}
/**
 * Image message
 */
export interface ImageMessage extends BaseMessage {
    type: "image";
    url?: string;
    attachment_id?: string;
    caption?: string;
    attachment?: {
        type: string;
        payload: {
            url: string;
        };
    };
}
/**
 * File message
 */
export interface FileMessage extends BaseMessage {
    type: "file";
    url: string;
    filename: string;
    attachment?: {
        type: string;
        payload: {
            url: string;
        };
    };
}
/**
 * Sticker message
 */
export interface StickerMessage extends BaseMessage {
    type: "sticker";
    sticker_id: string;
    attachment?: {
        type: string;
        payload: {
            id: string;
        };
    };
}
/**
 * Template message
 */
export interface TemplateMessage extends BaseMessage {
    type: "template";
    template_id: string;
    template_data: Record<string, string>;
}
/**
 * Union type for all message types
 */
export type Message = TextMessage | ImageMessage | FileMessage | StickerMessage | TemplateMessage;
/**
 * Message recipient
 */
export interface MessageRecipient {
    /**
     * User ID
     */
    user_id?: string;
    /**
     * Phone number (for ZNS)
     */
    phone?: string;
}
/**
 * Send message request
 */
export interface SendMessageRequest {
    /**
     * Message recipient
     */
    recipient: MessageRecipient;
    /**
     * Message content
     */
    message: Message;
    /**
     * Message type category
     */
    messaging_type?: "consultation" | "transaction" | "promotion" | "response" | "update" | "message_tag";
    /**
     * Tracking ID
     */
    tracking_id?: string;
}
/**
 * Send message response
 */
export interface SendMessageResponse {
    /**
     * Message ID
     */
    message_id: string;
    /**
     * Recipient user ID
     */
    user_id: string;
    /**
     * Quota information (optional - only present for free messages)
     */
    quota?: {
        /** Quota type: "reply" | "sub_quota" | "purchase_quota" | "reward_quota" */
        quota_type: "reply" | "sub_quota" | "purchase_quota" | "reward_quota";
        /** Remaining quota (for reply and sub_quota types) */
        remain?: string;
        /** Total quota (for reply and sub_quota types) */
        total?: string;
        /** Expiration date (for sub_quota type) */
        expired_date?: string;
        /** Owner type (for purchase_quota and reward_quota types) */
        owner_type?: "OA" | "App";
        /** Owner ID (for purchase_quota and reward_quota types) */
        owner_id?: string;
    };
}
/**
 * Upload file response
 */
export interface UploadFileResponse {
    /**
     * Attachment ID
     */
    attachment_id: string;
    /**
     * File URL
     */
    url: string;
    /**
     * File size
     */
    size?: number;
    /**
     * File type
     */
    type?: string;
}
/**
 * Message status
 */
export declare enum MessageStatus {
    SENT = "sent",
    DELIVERED = "delivered",
    READ = "read",
    FAILED = "failed"
}
/**
 * Message event
 */
export interface MessageEvent {
    /**
     * Event type
     */
    event: "message" | "delivery" | "read";
    /**
     * Message ID
     */
    message_id: string;
    /**
     * User ID
     */
    user_id: string;
    /**
     * Timestamp
     */
    timestamp: number;
    /**
     * Message content (for incoming messages)
     */
    message?: Message;
}
/**
 * Consultation message types
 */
export interface ConsultationTextMessage extends BaseMessage {
    type: "consultation_text";
    text: string;
}
export interface ConsultationImageMessage extends BaseMessage {
    type: "consultation_image";
    url: string;
    message?: string;
}
export interface ConsultationFileMessage extends BaseMessage {
    type: "consultation_file";
    url: string;
    filename: string;
    message?: string;
}
export interface ConsultationStickerMessage extends BaseMessage {
    type: "consultation_sticker";
    sticker_id: string;
    message?: string;
}
export interface ConsultationQuoteMessage extends BaseMessage {
    type: "consultation_quote";
    text: string;
    quote: {
        message_id: string;
        content: string;
    };
}
export interface ConsultationRequestInfoMessage extends BaseMessage {
    type: "consultation_request_info";
    title: string;
    subtitle?: string;
    image_url?: string;
    elements: Array<{
        title: string;
        type: "text" | "phone" | "email" | "date";
        required?: boolean;
        placeholder?: string;
    }>;
}
/**
 * Transaction message types
 */
export interface TransactionMessage extends BaseMessage {
    type: "transaction";
    template_id?: string;
    template_data?: Record<string, string>;
    mode?: "development" | "production";
    attachment?: {
        type: string;
        payload: {
            template_type: string;
            elements: Array<{
                title: string;
                subtitle?: string;
                image_url?: string;
                default_action?: {
                    type: string;
                    url: string;
                };
                buttons?: Array<{
                    type: string;
                    title: string;
                    url?: string;
                    payload?: string;
                }>;
            }>;
        };
    };
}
/**
 * Promotion message types
 */
export interface PromotionMessage extends BaseMessage {
    type: "promotion";
    template_id?: string;
    template_data?: Record<string, string>;
    mode?: "development" | "production";
    attachment?: {
        type: string;
        payload: {
            template_type: string;
            elements: Array<{
                title: string;
                subtitle?: string;
                image_url?: string;
                default_action?: {
                    type: string;
                    url: string;
                };
                buttons?: Array<{
                    type: string;
                    title: string;
                    url?: string;
                    payload?: string;
                }>;
            }>;
        };
    };
}
/**
 * Anonymous message types
 */
export interface AnonymousTextMessage extends BaseMessage {
    type: "anonymous_text";
    text: string;
}
export interface AnonymousImageMessage extends BaseMessage {
    type: "anonymous_image";
    url: string;
    message?: string;
}
export interface AnonymousFileMessage extends BaseMessage {
    type: "anonymous_file";
    url: string;
    filename: string;
    message?: string;
}
export interface AnonymousStickerMessage extends BaseMessage {
    type: "anonymous_sticker";
    sticker_id: string;
    message?: string;
}
/**
 * Reaction message
 */
export interface ReactionMessage extends BaseMessage {
    type: "reaction";
    message_id: string;
    reaction_type: "heart" | "like" | "haha" | "wow" | "sad" | "angry";
}
/**
 * Mini app message
 */
export interface MiniAppMessage extends BaseMessage {
    type: "miniapp";
    app_id: string;
    title: string;
    subtitle?: string;
    image_url?: string;
    data?: Record<string, any>;
}
/**
 * Extended message union type
 */
export type ExtendedMessage = Message | ConsultationTextMessage | ConsultationImageMessage | ConsultationFileMessage | ConsultationStickerMessage | ConsultationQuoteMessage | ConsultationRequestInfoMessage | TransactionMessage | PromotionMessage | AnonymousTextMessage | AnonymousImageMessage | AnonymousFileMessage | AnonymousStickerMessage | ReactionMessage | MiniAppMessage;
//# sourceMappingURL=message.d.ts.map