import { CommunicationIdentifierKind } from '@azure/communication-common';
import { CallState, DeviceManagerState } from "../../../../../calling-stateful-client/src";
import { ChatThreadClientState } from "../../../../../chat-stateful-client/src";
import { CallAdapter, CallAdapterState, CallCompositePage } from '../../CallComposite';
import { VideoBackgroundImage, VideoBackgroundEffect } from '../../CallComposite';
import { DeepNoiseSuppressionEffectDependency, VideoBackgroundEffectsDependency } from "../../../../../calling-component-bindings/src";
import { ChatAdapterState } from '../../ChatComposite';
import { AdapterErrors } from '../../common/adapters';
import { AdapterNotifications } from '../../common/adapters';
import { EnvironmentInfo } from '@azure/communication-calling';
import { ReactionResources } from "../../../../../react-components/src";
/**
 * UI state pertaining to the {@link CallWithChatComposite}.
 *
 * @public
 */
export interface CallWithChatAdapterUiState {
    /**
     * Microphone state before a call has joined.
     *
     * @public
     */
    isLocalPreviewMicrophoneEnabled: boolean;
    /**
     * Current page of the Composite.
     *
     * @public
     */
    page: CallCompositePage;
}
/**
 * State from the backend services that drives {@link CallWithChatComposite}.
 *
 * @public
 */
export interface CallWithChatClientState {
    /** ID of the call participant using this CallWithChatAdapter. */
    userId: CommunicationIdentifierKind;
    /** Display name of the participant using this CallWithChatAdapter. */
    displayName: string | undefined;
    /** State of the current call. */
    call?: CallState;
    /** State of the current chat. */
    chat?: ChatThreadClientState;
    /** Latest call error encountered for each operation performed via the adapter. */
    latestCallErrors: AdapterErrors;
    /** Latest call notifications encountered in the call client state via the adapter. */
    latestCallNotifications: AdapterNotifications;
    /** Latest chat error encountered for each operation performed via the adapter. */
    latestChatErrors: AdapterErrors;
    /** State of available and currently selected devices */
    devices: DeviceManagerState;
    /** State of whether the active call is a Teams interop call */
    isTeamsCall: boolean;
    /** State of whether the active call is a Teams interop meeting */
    isTeamsMeeting: boolean;
    /** alternateCallerId for PSTN call */
    alternateCallerId?: string;
    /** Environment information for system adapter is made on */
    environmentInfo?: EnvironmentInfo;
    /** Default set of background images for background replacement effect */
    videoBackgroundImages?: VideoBackgroundImage[];
    /** Dependency to be injected for video background effects */
    onResolveVideoEffectDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    /**
     * Dependency to be injected for deep noise suppression effect.
     */
    onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
    /** State to track whether the noise suppression should be on by default.
     */
    deepNoiseSuppressionOnByDefault?: boolean;
    /** State to track whether to hide the noise suppression button.
     */
    hideDeepNoiseSuppressionButton?: boolean;
    /** State to track the selected video background effect */
    selectedVideoBackgroundEffect?: VideoBackgroundEffect;
    /** Hide attendee names in teams meeting */
    hideAttendeeNames?: boolean;
    /**
     * Reaction resources to render in meetings
     * */
    reactions?: ReactionResources;
}
/**
 * CallWithChat State is a combination of Stateful Chat and Stateful Calling clients with some
 * state specific to the CallWithChat Composite only.
 *
 * @public
 */
export interface CallWithChatAdapterState extends CallWithChatAdapterUiState, CallWithChatClientState {
}
/**
 * @private
 */
export declare function callWithChatAdapterStateFromBackingStates(callAdapter: CallAdapter): CallWithChatAdapterState;
/**
 * @private
 */
export declare function mergeChatAdapterStateIntoCallWithChatAdapterState(existingCallWithChatAdapterState: CallWithChatAdapterState, chatAdapterState: ChatAdapterState): CallWithChatAdapterState;
/**
 * @private
 */
export declare function mergeCallAdapterStateIntoCallWithChatAdapterState(existingCallWithChatAdapterState: CallWithChatAdapterState, callAdapterState: CallAdapterState): CallWithChatAdapterState;
//# sourceMappingURL=CallWithChatAdapterState.d.ts.map