import { InitEventCallback } from './types.cjs';
import * as StreamingAvatar from '@heygen/streaming-avatar';
import StreamingAvatar__default, { StartAvatarRequest } from '@heygen/streaming-avatar';
export { AvatarQuality, ConnectionQuality, ElevenLabsModel, EventHandler, STTProvider, StartAvatarRequest, default as StreamingAvatar, StreamingAvatarApiConfig, StreamingEvents, StreamingTalkingMessageEvent, TaskMode, TaskType, UserTalkingMessageEvent, VoiceChatTransport, VoiceEmotion } from '@heygen/streaming-avatar';
import * as react from 'react';

declare enum StreamingAvatarSessionState {
    INACTIVE = "inactive",
    CONNECTING = "connecting",
    CONNECTED = "connected"
}
declare enum MessageSender {
    CLIENT = "CLIENT",
    AVATAR = "AVATAR"
}
interface Message {
    id: string;
    sender: MessageSender;
    content: string;
}
declare function configure(config: {
    basePath?: string;
}): void;
declare function reset(): void;

declare const useConnectionQuality: () => {
    connectionQuality: StreamingAvatar.ConnectionQuality;
};

declare const useConversationState: () => {
    isAvatarListening: boolean;
    startListening: () => void;
    stopListening: () => void;
    isUserTalking: boolean;
    isAvatarTalking: boolean;
};

declare const useInterrupt: () => {
    interrupt: () => void;
};

declare const useMessageHistory: () => {
    messages: Message[];
};

declare const useStreamingAvatarSession: () => {
    avatarRef: react.RefObject<StreamingAvatar__default | null>;
    sessionState: StreamingAvatarSessionState;
    stream: MediaStream | null;
    initAvatar: (token: string, { onStreamReady, onStreamDisconnected, onAvatarStartTalking, onAvatarStopTalking, onAvatarTalkingMessage, onAvatarEndMessage, onUserStartTalking, onUserStopTalking, onUserTalkingMessage, onUserEndMessage, }?: InitEventCallback) => StreamingAvatar__default;
    startAvatar: (config: StartAvatarRequest, token?: string) => Promise<StreamingAvatar__default>;
    stopAvatar: () => Promise<void>;
};

declare const useTextChat: () => {
    sendMessage: (message: string) => void;
    sendMessageSync: (message: string) => Promise<any>;
    repeatMessage: (message: string) => Promise<any> | undefined;
    repeatMessageSync: (message: string) => Promise<any>;
};

declare const useVoiceChat: () => {
    startVoiceChat: (isInputAudioMuted?: boolean) => Promise<void>;
    stopVoiceChat: () => void;
    muteInputAudio: () => void;
    unmuteInputAudio: () => void;
    isMuted: boolean;
    isVoiceChatActive: boolean;
    isVoiceChatLoading: boolean;
};

export { InitEventCallback, type Message, MessageSender, StreamingAvatarSessionState, configure, reset, useConnectionQuality, useConversationState, useInterrupt, useMessageHistory, useStreamingAvatarSession, useTextChat, useVoiceChat };
