import ACSClient from "./core/messaging/ACSClient";
import { VoiceVideoCallingOptionalParams } from "./types/config";
import { ChatAdapter, GetAgentAvailabilityResponse, GetCurrentLiveChatContextResponse, GetLiveChatTranscriptResponse, GetMessagesResponse, GetPersistentChatHistoryResponse, GetPreChatSurveyResponse, GetVoiceVideoCallingResponse, MaskingRules, UploadFileAttachmentResponse } from "./types/response";
import { ParticipantsRemovedEvent } from '@azure/communication-signaling';
import ChatAdapterOptionalParams from "./core/messaging/ChatAdapterOptionalParams";
import ChatConfig from "./core/ChatConfig";
import ChatReconnectContext from "./core/ChatReconnectContext";
import ChatReconnectOptionalParams from "./core/ChatReconnectOptionalParams";
import ChatSDKConfig from "./core/ChatSDKConfig";
import ChatSDKMessage from "./core/messaging/ChatSDKMessage";
import ChatTranscriptBody from "./core/ChatTranscriptBody";
import DebugOptionalParams from "./core/DebugOptionalParams";
import EmailLiveChatTranscriptOptionaParams from "./core/EmailLiveChatTranscriptOptionalParams";
import EndChatOptionalParams from "./core/EndChatOptionalParams";
import FetchChatTokenResponse from "@microsoft/ocsdk/lib/Model/FetchChatTokenResponse";
import FileMetadata from "@microsoft/omnichannel-amsclient/lib/FileMetadata";
import FramedClient from "@microsoft/omnichannel-amsclient/lib/FramedClient";
import FramedlessClient from "@microsoft/omnichannel-amsclient/lib/FramedlessClient";
import GetAgentAvailabilityOptionalParams from "./core/GetAgentAvailabilityOptionalParams";
import GetChatTokenOptionalParams from "./core/GetChatTokenOptionalParams";
import GetConversationDetailsOptionalParams from "./core/GetConversationDetailsOptionalParams";
import GetLiveChatConfigOptionalParams from "./core/GetLiveChatConfigOptionalParams";
import GetLiveChatTranscriptOptionalParams from "./core/GetLiveChatTranscriptOptionalParams";
import GetPersistentChatHistoryOptionalParams from "./core/GetPersistentChatHistoryOptionalParams";
import IChatToken from "./external/IC3Adapter/IChatToken";
import IFileInfo from "@microsoft/omnichannel-ic3core/lib/interfaces/IFileInfo";
import IFileMetadata from "@microsoft/omnichannel-ic3core/lib/model/IFileMetadata";
import IRawThread from "@microsoft/omnichannel-ic3core/lib/interfaces/IRawThread";
import InitializeOptionalParams from "./core/InitializeOptionalParams";
import LiveWorkItemDetails from "./core/LiveWorkItemDetails";
import OmnichannelConfig from "./core/OmnichannelConfig";
import OmnichannelMessage from "./core/messaging/OmnichannelMessage";
import OnNewMessageOptionalParams from "./core/messaging/OnNewMessageOptionalParams";
import PostChatContext from "./core/PostChatContext";
import StartChatOptionalParams from "./core/StartChatOptionalParams";
declare class OmnichannelChatSDK {
    private debug;
    runtimeId: string;
    OCSDKProvider: unknown;
    IC3SDKProvider: unknown;
    OCClient: any;
    IC3Client: any;
    ACSClient: ACSClient | null;
    AMSClient: FramedClient | FramedlessClient | null;
    omnichannelConfig: OmnichannelConfig;
    chatSDKConfig: ChatSDKConfig;
    isInitialized: boolean;
    localeId: string;
    requestId: string;
    sessionId: string | null;
    private chatOperationInProgress;
    private pendingOperations;
    private deferInitialAuth;
    private unqServicesOrgUrl;
    private coreServicesOrgUrl;
    private dynamicsLocationCode;
    private chatToken;
    private liveChatConfig;
    private widgetSnippetBaseUrl;
    private liveChatVersion;
    private dataMaskingRules;
    private authSettings;
    private authenticatedUserToken;
    private preChatSurvey;
    private conversation;
    private callingOption;
    private telemetry;
    private scenarioMarker;
    private ic3ClientLogger;
    private ocSdkLogger;
    private acsClientLogger;
    private acsAdapterLogger;
    private callingSdkLogger;
    private amsClientLogger;
    private isPersistentChat;
    private isChatReconnect;
    private reconnectId;
    private refreshTokenTimer;
    private AMSClientLoadCurrentState;
    private isMaskingDisabled;
    private maskingCharacter;
    private botCSPId;
    private isAMSClientAllowed;
    private debugSDK;
    private debugAMS;
    private debugACS;
    private detailedDebugEnabled;
    private regexCompiledForDataMasking;
    private isEndingChat;
    constructor(omnichannelConfig: OmnichannelConfig, chatSDKConfig?: ChatSDKConfig);
    /**
     * Executes an operation with mutual exclusion to prevent race conditions
     * between startChat and endChat operations
     */
    private executeWithLock;
    /**
     * Processes the next pending operation in the queue
     */
    private processNextOperation;
    /**
     *
     * @param flag Flag to enable/disable debug log telemetry, will be applied to all components
     * @description Set the debug flag to enable/disable debug log telemetry
     */
    setDebug(flag: boolean): void;
    /**
     * @description Allow to target specific components to enable/disable debug log telemetry, reducing the noise in the logs.
     * @param flagSDK Flag to enable disable SDK debug log telemetry
     * @param flagAcs Flag to enable/disable debugg log telemetry for Acs components (ACSClient and ACSAdapter)
     * @param flagAttachment Flag to enable/disable debug log telemetry for Attachment components)
     */
    setDebugDetailed(optionalParams: DebugOptionalParams): void;
    private retryLoadAMSClient;
    private getAMSClient;
    private loadInitComponents;
    private evaluateAMSAvailability;
    private loadAmsClient;
    private parallelInitialization;
    private sequentialInitialization;
    /**
     *
     * @param optionalParams
     * @param parallel if true , it will run in parallel (fastest version) with components loaded in the background
     * @returns livechatConfig
     */
    initialize(optionalParams?: InitializeOptionalParams): Promise<ChatConfig>;
    private loadChatConfig;
    private getChatReconnectContextWithAuthToken;
    private getChatReconnectContextWithReconnectId;
    getChatReconnectContext(optionalParams?: ChatReconnectOptionalParams): Promise<ChatReconnectContext>;
    startChat(optionalParams?: StartChatOptionalParams): Promise<void>;
    private internalStartChat;
    private closeChat;
    /**
     * Ends the chat by closing the session and disconnecting from the conversation.
     *
     * On React Native, automatically waits for conversational survey completion if enabled.
     * On Web, disconnects immediately as the widget handles surveys independently.
     *
     * @param endChatOptionalParams - Optional parameters
     * @param endChatOptionalParams.isSessionEnded - Skip survey wait if session already ended
     * @example
     * await chatSDK.endChat();
     * await chatSDK.endChat({ isSessionEnded: true });
     */
    endChat(endChatOptionalParams?: EndChatOptionalParams): Promise<void>;
    private internalEndChat;
    /**
     * Waits for a message with specific tags. Used for conversational survey detection.
     * Automatically unregisters the listener after the promise resolves to prevent memory leaks.
     * Includes timeout to prevent indefinite hanging if messages never arrive.
     */
    private waitForMessageTags;
    private waitForSurveyStart;
    private waitForConversationalSurveyEnd;
    getCurrentLiveChatContext(): Promise<GetCurrentLiveChatContextResponse>;
    getConversationDetails(optionalParams?: GetConversationDetailsOptionalParams): Promise<LiveWorkItemDetails>;
    /**
     * Gets PreChat Survey.
     * @param parse Whether to parse PreChatSurvey to JSON or not.
     */
    getPreChatSurvey(parse?: boolean): Promise<GetPreChatSurveyResponse>;
    getLiveChatConfig(optionalParams?: GetLiveChatConfigOptionalParams): Promise<ChatConfig>;
    getChatToken(cached?: boolean, optionalParams?: GetChatTokenOptionalParams): Promise<IChatToken>;
    setChatToken(chatToken: FetchChatTokenResponse): void;
    getCallingToken(): Promise<string>;
    private recordMessages;
    getMessages(): Promise<GetMessagesResponse>;
    getDataMaskingRules(): Promise<MaskingRules>;
    private transformMessage;
    sendMessage(message: ChatSDKMessage): Promise<OmnichannelMessage | void>;
    onNewMessage(onNewMessageCallback: CallableFunction, optionalParams?: OnNewMessageOptionalParams): Promise<void>;
    sendTypingEvent(): Promise<void>;
    /**
     * Fetches unread message count for the authenticated user.
     * Auth-only — does not require an active chat session.
     */
    getUnreadMessageCount(): Promise<object>;
    /**
     * Sends a read receipt for a specific message.
     * Authenticated: calls MRT (updates NRD + forwards to ACS).
     * Unauthenticated: calls ACS directly.
     */
    sendReadReceipt(messageId: string): Promise<void>;
    onTypingEvent(onTypingEventCallback: CallableFunction): Promise<void>;
    onAgentEndSession(onAgentEndSessionCallback: (message: IRawThread | ParticipantsRemovedEvent) => void): Promise<void>;
    uploadFileAttachment(fileInfo: IFileInfo | File): Promise<UploadFileAttachmentResponse>;
    downloadFileAttachment(fileMetadata: FileMetadata | IFileMetadata): Promise<Blob>;
    emailLiveChatTranscript(body: ChatTranscriptBody, optionalParams?: EmailLiveChatTranscriptOptionaParams): Promise<void>;
    getLiveChatTranscript(optionalParams?: GetLiveChatTranscriptOptionalParams): Promise<GetLiveChatTranscriptResponse>;
    createChatAdapter(optionalParams?: ChatAdapterOptionalParams): Promise<ChatAdapter>;
    isVoiceVideoCallingEnabled(): boolean;
    getVoiceVideoCalling(voiceVideoCallingOptionalParams?: VoiceVideoCallingOptionalParams): Promise<GetVoiceVideoCallingResponse>;
    getPostChatSurveyContext(): Promise<PostChatContext>;
    getAgentAvailability(optionalParams?: GetAgentAvailabilityOptionalParams): Promise<GetAgentAvailabilityResponse>;
    authenticateChat(tokenOrProvider: string | (() => Promise<string>), optionalParams?: {
        refreshChatToken?: boolean;
    }): Promise<void>;
    startPolling(): Promise<void>;
    stopPolling(): Promise<void>;
    private populateInitChatOptionalParam;
    private getIC3Client;
    private setPrechatConfigurations;
    private setDataMaskingConfiguration;
    private compileDataMaskingRegex;
    private setAuthSettingConfig;
    private setPersistentChatConfiguration;
    private setLocaleIdConfiguration;
    private setCallingOptionConfiguration;
    private setLiveChatVersionConfiguration;
    private setWidgetSnippetBaseUrl;
    private getChatConfig;
    private buildConfigurations;
    private resolveIC3ClientUrl;
    private resolveChatAdapterUrl;
    private updateChatToken;
    private setAuthTokenProvider;
    private useCoreServicesOrgUrlIfNotSet;
    /**
     * Handles cleanup of failed conversation join attempts.
     * Only cleans up conversations that were freshly created and failed to join.
     *
     * @param error - The error that occurred during conversation join
     * @param optionalParams - Start chat optional parameters
     * @private
     */
    private handleConversationJoinFailure;
    /**
     * Get persistent chat history for authenticated users.
     * @param getPersistentChatHistoryOptionalParams Optional parameters for persistent chat history retrieval.
     */
    getPersistentChatHistory(getPersistentChatHistoryOptionalParams?: GetPersistentChatHistoryOptionalParams): Promise<GetPersistentChatHistoryResponse | undefined>;
}
export default OmnichannelChatSDK;
