import { AzureCommunicationTokenCredential } from "@azure/communication-common";
import { ChatClient, ChatMessage, ChatParticipant } from "@azure/communication-chat";
import ACSClientConfig from "./ACSClientConfig";
import { ACSClientLogger } from "../../utils/loggers";
import ACSGetMessagesOptionalParams from "./ACSClientGetMessagesOptionParams";
import ACSRegisterOnNewMessageOptionalParams from "./ACSRegisterOnNewMessageOptionalParams";
import ACSSessionInfo from "./ACSSessionInfo";
import ChatSDKMessage from "./ChatSDKMessage";
import OmnichannelMessage from "./OmnichannelMessage";
export interface ParticipantMapping {
    [key: string]: ChatParticipant;
}
export declare class ACSConversation {
    private logger;
    private tokenCredential;
    private chatClient;
    private chatThreadClient?;
    private sessionInfo?;
    private participantsMapping?;
    private eventListeners;
    private keepPolling;
    private pollingTimer;
    constructor(tokenCredential: AzureCommunicationTokenCredential, chatClient: ChatClient, logger?: ACSClientLogger | null);
    startPolling(): Promise<void>;
    stopPolling(): Promise<void>;
    initialize(sessionInfo: ACSSessionInfo): Promise<void>;
    getMessages(optionsParams?: ACSGetMessagesOptionalParams): Promise<OmnichannelMessage[] | ChatMessage[]>;
    getParticipants(): Promise<ChatParticipant[]>;
    registerOnNewMessage(onNewMessageCallback: CallableFunction, optionalParams?: ACSRegisterOnNewMessageOptionalParams): Promise<void>;
    registerOnThreadUpdate(onThreadUpdateCallback: CallableFunction): Promise<void>;
    onTypingEvent(onTypingEventCallback: CallableFunction): Promise<void>;
    sendMessage(message: ChatSDKMessage): Promise<OmnichannelMessage>;
    sendTyping(): Promise<void>;
    sendFileMessage(): Promise<void>;
    sendFileData(): Promise<void>;
    uploadFile(): Promise<void>;
    downloadFile(): Promise<void>;
    disconnect(): Promise<void>;
    private createParticipantsMapping;
    private trackListener;
    addListener(event: string, listener: CallableFunction): void;
    removeListener(event: string, listener: CallableFunction): void;
}
declare class ACSClient {
    private logger;
    private tokenCredential;
    private chatClient;
    constructor(logger?: ACSClientLogger | null);
    initialize(acsClientConfig: ACSClientConfig): Promise<void>;
    joinConversation(sessionInfo: ACSSessionInfo): Promise<ACSConversation>;
    getChatClient(): ChatClient | null;
}
export default ACSClient;
