import { AddPhoneNumberOptions, AudioDeviceInfo, AudioEffectsStartConfig, BackgroundBlurConfig, BackgroundBlurEffect, BackgroundReplacementConfig, BackgroundReplacementEffect, Call, CallSurvey, CallSurveyResponse, DtmfTone, LocalVideoStream, StartCallOptions, TeamsCall, VideoDeviceInfo } from '@azure/communication-calling';
import { StatefulCallClient, StatefulDeviceManager } from "../../../calling-stateful-client/src";
import { CreateVideoStreamViewResult, VideoStreamOptions, CaptionsOptions } from "../../../react-components/src";
import { CommunicationUserIdentifier, PhoneNumberIdentifier } from '@azure/communication-common';
import { CommunicationIdentifier } from '@azure/communication-common';
import { Reaction } from '@azure/communication-calling';
import { _ComponentCallingHandlers } from './createHandlers';
import { TogetherModeStreamViewResult, TogetherModeStreamOptions } from "../../../react-components/src";
/**
 * Object containing all the handlers required for calling components.
 *
 * Calling related components from this package are able to pick out relevant handlers from this object.
 * See {@link useHandlers} and {@link usePropsFor}.
 *
 * @public
 */
export interface CommonCallingHandlers {
    onStartLocalVideo: () => Promise<void>;
    onToggleCamera: (options?: VideoStreamOptions) => Promise<void>;
    onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;
    onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;
    onSelectCamera: (device: VideoDeviceInfo, options?: VideoStreamOptions) => Promise<void>;
    onToggleMicrophone: () => Promise<void>;
    onStartScreenShare: () => Promise<void>;
    onStopScreenShare: () => Promise<void>;
    onToggleScreenShare: () => Promise<void>;
    onHangUp: (forEveryone?: boolean) => Promise<void>;
    onRaiseHand: () => Promise<void>;
    onLowerHand: () => Promise<void>;
    onToggleRaiseHand: () => Promise<void>;
    onReactionClick: (reaction: Reaction) => Promise<void>;
    onToggleHold: () => Promise<void>;
    onAddParticipant(participant: CommunicationUserIdentifier): Promise<void>;
    onAddParticipant(participant: PhoneNumberIdentifier, options: AddPhoneNumberOptions): Promise<void>;
    onCreateLocalStreamView: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
    onCreateRemoteStreamView: (userId: string, options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
    /**
     * @deprecated use {@link onDisposeRemoteVideoStreamView} and {@link onDisposeRemoteScreenShareStreamView} instead.
     */
    onDisposeRemoteStreamView: (userId: string) => Promise<void>;
    onDisposeLocalStreamView: () => Promise<void>;
    onDisposeRemoteVideoStreamView: (userId: string) => Promise<void>;
    onDisposeRemoteScreenShareStreamView: (userId: string) => Promise<void>;
    onDisposeLocalScreenShareStreamView: () => Promise<void>;
    onSendDtmfTone: (dtmfTone: DtmfTone) => Promise<void>;
    onRemoveParticipant(userId: string): Promise<void>;
    onRemoveParticipant(participant: CommunicationIdentifier): Promise<void>;
    onStartCall: (participants: CommunicationIdentifier[], options?: StartCallOptions) => void;
    onAcceptCall: (incomingCallId: string, useVideo?: boolean) => Promise<void>;
    onRejectCall: (incomingCallId: string) => Promise<void>;
    onRemoveVideoBackgroundEffects: () => Promise<void>;
    onBlurVideoBackground: (backgroundBlurConfig?: BackgroundBlurConfig) => Promise<void>;
    onReplaceVideoBackground: (backgroundReplacementConfig: BackgroundReplacementConfig) => Promise<void>;
    onStartNoiseSuppressionEffect: () => Promise<void>;
    onStopNoiseSuppressionEffect: () => Promise<void>;
    onStartCaptions: (options?: CaptionsOptions) => Promise<void>;
    onStopCaptions: () => Promise<void>;
    onSendRealTimeText: (text: string, isFinalized: boolean) => Promise<void>;
    onSetSpokenLanguage: (language: string) => Promise<void>;
    onSetCaptionLanguage: (language: string) => Promise<void>;
    onSubmitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined>;
    onStartSpotlight: (userIds?: string[]) => Promise<void>;
    onStopSpotlight: (userIds?: string[]) => Promise<void>;
    onStopAllSpotlight: () => Promise<void>;
    onMuteParticipant: (userId: string) => Promise<void>;
    onMuteAllRemoteParticipants: () => Promise<void>;
    /**
     * Call back to create a view for together mode
     */
    onCreateTogetherModeStreamView: (options?: TogetherModeStreamOptions) => Promise<void | TogetherModeStreamViewResult>;
    /**
     * Call back to create a view for together mode
     */
    onStartTogetherMode: () => Promise<void>;
    /**
     * Call set together mode scene size
     */
    onSetTogetherModeSceneSize: (width: number, height: number) => void;
    /**
     * Call back to dispose together mode views
     */
    onDisposeTogetherModeStreamView: () => Promise<void>;
    /**
     * Forbid remote participants from sending audio
     *
     */
    onForbidAudio?: (userIds: string[]) => Promise<void>;
    /**
     * Permit remote participants to send audio
     *
     */
    onPermitAudio?: (userIds: string[]) => Promise<void>;
    /**
     * Change meeting option forbid remote participants from sending audio
     *
     */
    onForbidOthersAudio?: () => Promise<void>;
    /**
     * Change meeting option permit remote participants to send audio
     *
     */
    onPermitOthersAudio?: () => Promise<void>;
    /**
     * Forbid remote participants from sending video
     *
     */
    onForbidVideo?: (userIds: string[]) => Promise<void>;
    /**
     * Permit remote participants to send video
     *
     */
    onPermitVideo?: (userIds: string[]) => Promise<void>;
    /**
     * Change meeting option forbid remote participants from sending video
     *
     */
    onForbidOthersVideo?: () => Promise<void>;
    /**
     * Change meeting option permit remote participants to send video
     *
     */
    onPermitOthersVideo?: () => Promise<void>;
}
/**
 * @private
 */
export declare const areStreamsEqual: (prevStream: LocalVideoStream, newStream: LocalVideoStream) => boolean;
/**
 * Dependency type to be injected for video background effects
 *
 * @public
 */
export type VideoBackgroundEffectsDependency = {
    createBackgroundBlurEffect: (config?: BackgroundBlurConfig) => BackgroundBlurEffect;
    createBackgroundReplacementEffect: (config: BackgroundReplacementConfig) => BackgroundReplacementEffect;
};
/**
 * Dependency type to be injected for deep noise suppression
 *
 * @public
 */
export type DeepNoiseSuppressionEffectDependency = {
    deepNoiseSuppressionEffect: AudioEffectsStartConfig;
};
/**
 * Create the common implementation of {@link CallingHandlers} for all types of Call
 *
 * @private
 */
export declare const createDefaultCommonCallingHandlers: (callClient: StatefulCallClient, deviceManager: StatefulDeviceManager | undefined, call: Call | TeamsCall | undefined, options?: {
    onResolveVideoBackgroundEffectsDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
}) => CommonCallingHandlers & Partial<_ComponentCallingHandlers>;
//# sourceMappingURL=createCommonHandlers.d.ts.map