export declare enum EngineStatus {
    DISCONNECTED = "disconnected",
    INITIALIZING = "initializing",
    QR_READY = "qr_ready",
    AUTHENTICATING = "authenticating",
    READY = "ready",
    FAILED = "failed"
}
export interface MessageResult {
    id: string;
    timestamp: number;
    ack?: number;
}
export interface MediaInput {
    mimetype: string;
    data: Buffer | string;
    filename?: string;
    caption?: string;
}
export interface IncomingMessage {
    id: string;
    from: string;
    to: string;
    chatId: string;
    body: string;
    type: string;
    timestamp: number;
    fromMe: boolean;
    isGroup: boolean;
    media?: {
        mimetype: string;
        filename?: string;
        data?: string;
    };
    quotedMessage?: {
        id: string;
        body: string;
    };
}
export interface Contact {
    id: string;
    name?: string;
    pushName?: string;
    number: string;
    isMyContact: boolean;
    isBlocked: boolean;
    profilePicUrl?: string;
}
export interface Group {
    id: string;
    name: string;
    participantsCount?: number;
    isAdmin?: boolean;
}
export interface GroupParticipant {
    id: string;
    number: string;
    name?: string;
    isAdmin: boolean;
    isSuperAdmin: boolean;
}
export interface GroupInfo {
    id: string;
    name: string;
    description?: string;
    owner?: string;
    createdAt?: number;
    participants: GroupParticipant[];
    isReadOnly?: boolean;
    isAnnounce?: boolean;
}
export interface ContactCard {
    name: string;
    number: string;
}
export interface LocationInput {
    latitude: number;
    longitude: number;
    description?: string;
    address?: string;
}
export interface ReactionSender {
    senderId: string;
    emoji: string;
    timestamp: number;
}
export interface MessageReaction {
    emoji: string;
    senders: ReactionSender[];
}
export interface Label {
    id: string;
    name: string;
    hexColor: string;
}
export interface Status {
    id: string;
    contact: {
        id: string;
        name?: string;
        pushName?: string;
    };
    type: 'text' | 'image' | 'video';
    caption?: string;
    mediaUrl?: string;
    backgroundColor?: string;
    font?: number;
    timestamp: Date;
    expiresAt: Date;
}
export interface TextStatusOptions {
    backgroundColor?: string;
    font?: number;
}
export interface StatusResult {
    statusId: string;
    timestamp: Date;
    expiresAt: Date;
}
export interface Channel {
    id: string;
    name: string;
    description?: string;
    inviteCode?: string;
    subscriberCount?: number;
    picture?: string;
    verified?: boolean;
    createdAt?: number;
}
export interface ChannelMessage {
    id: string;
    body: string;
    timestamp: number;
    hasMedia: boolean;
    mediaUrl?: string;
}
export interface Catalog {
    id: string;
    name: string;
    description?: string;
    productCount: number;
    url: string;
}
export interface Product {
    id: string;
    name: string;
    description?: string;
    price: number;
    currency: string;
    priceFormatted: string;
    imageUrl?: string;
    url: string;
    isAvailable: boolean;
    retailerId?: string;
}
export interface ProductQueryOptions {
    page?: number;
    limit?: number;
}
export interface PaginatedProducts {
    products: Product[];
    pagination: {
        page: number;
        limit: number;
        total: number;
        totalPages: number;
    };
}
export interface EngineEventCallbacks {
    onQRCode?: (qr: string) => void;
    onReady?: (phone: string, pushName: string) => void;
    onMessage?: (message: IncomingMessage) => void;
    onMessageAck?: (messageId: string, ack: number) => void;
    onDisconnected?: (reason: string) => void;
    onStateChanged?: (state: EngineStatus) => void;
}
export interface IWhatsAppEngine {
    initialize(callbacks: EngineEventCallbacks): Promise<void>;
    disconnect(): Promise<void>;
    logout(): Promise<void>;
    destroy(): Promise<void>;
    getStatus(): EngineStatus;
    getQRCode(): string | null;
    getPhoneNumber(): string | null;
    getPushName(): string | null;
    sendTextMessage(chatId: string, text: string): Promise<MessageResult>;
    sendImageMessage(chatId: string, media: MediaInput): Promise<MessageResult>;
    sendVideoMessage(chatId: string, media: MediaInput): Promise<MessageResult>;
    sendAudioMessage(chatId: string, media: MediaInput): Promise<MessageResult>;
    sendDocumentMessage(chatId: string, media: MediaInput): Promise<MessageResult>;
    sendLocationMessage(chatId: string, location: LocationInput): Promise<MessageResult>;
    sendContactMessage(chatId: string, contact: ContactCard): Promise<MessageResult>;
    sendStickerMessage(chatId: string, media: MediaInput): Promise<MessageResult>;
    replyToMessage(chatId: string, quotedMsgId: string, text: string): Promise<MessageResult>;
    forwardMessage(fromChatId: string, toChatId: string, messageId: string): Promise<MessageResult>;
    reactToMessage(chatId: string, messageId: string, emoji: string): Promise<void>;
    getMessageReactions(chatId: string, messageId: string): Promise<MessageReaction[]>;
    getContacts(): Promise<Contact[]>;
    getContactById(contactId: string): Promise<Contact | null>;
    checkNumberExists(number: string): Promise<boolean>;
    getGroups(): Promise<Group[]>;
    getGroupInfo(groupId: string): Promise<GroupInfo | null>;
    createGroup(name: string, participants: string[]): Promise<Group>;
    addParticipants(groupId: string, participants: string[]): Promise<void>;
    removeParticipants(groupId: string, participants: string[]): Promise<void>;
    promoteParticipants(groupId: string, participants: string[]): Promise<void>;
    demoteParticipants(groupId: string, participants: string[]): Promise<void>;
    leaveGroup(groupId: string): Promise<void>;
    setGroupSubject(groupId: string, subject: string): Promise<void>;
    setGroupDescription(groupId: string, description: string): Promise<void>;
    getGroupInviteCode(groupId: string): Promise<string>;
    revokeGroupInviteCode(groupId: string): Promise<string>;
    deleteMessage(chatId: string, messageId: string, forEveryone?: boolean): Promise<void>;
    getProfilePicture(contactId: string): Promise<string | null>;
    blockContact(contactId: string): Promise<void>;
    unblockContact(contactId: string): Promise<void>;
    getLabels(): Promise<Label[]>;
    getLabelById(labelId: string): Promise<Label | null>;
    getChatLabels(chatId: string): Promise<Label[]>;
    addLabelToChat(chatId: string, labelId: string): Promise<void>;
    removeLabelFromChat(chatId: string, labelId: string): Promise<void>;
    getSubscribedChannels(): Promise<Channel[]>;
    getChannelById(channelId: string): Promise<Channel | null>;
    subscribeToChannel(inviteCode: string): Promise<Channel>;
    unsubscribeFromChannel(channelId: string): Promise<void>;
    getChannelMessages(channelId: string, limit?: number): Promise<ChannelMessage[]>;
    getContactStatuses(): Promise<Status[]>;
    getContactStatus(contactId: string): Promise<Status[]>;
    postTextStatus(text: string, options?: TextStatusOptions): Promise<StatusResult>;
    postImageStatus(media: MediaInput, caption?: string): Promise<StatusResult>;
    postVideoStatus(media: MediaInput, caption?: string): Promise<StatusResult>;
    deleteStatus(statusId: string): Promise<void>;
    getCatalog(): Promise<Catalog | null>;
    getProducts(options?: ProductQueryOptions): Promise<PaginatedProducts>;
    getProduct(productId: string): Promise<Product | null>;
    sendProduct(chatId: string, productId: string, body?: string): Promise<MessageResult>;
    sendCatalog(chatId: string, body?: string): Promise<MessageResult>;
}
