/// <reference types="react" />
import { CallAdapterState, CallCompositePage, StartCallIdentifier } from '../adapter/CallAdapter';
import { CallControlOptions } from '../types/CallControlOptions';
import { CallState, RemoteParticipantState } from "../../../../../calling-stateful-client/src";
import { AdapterStateModifier, CallAdapterLocator } from '../adapter/AzureCommunicationCallAdapter';
import { VideoBackgroundEffectsDependency } from "../../../../../calling-component-bindings/src";
import { VideoBackgroundEffect } from '../adapter/CallAdapter';
import { EnvironmentInfo, VideoDeviceInfo } from '@azure/communication-calling';
import { VideoEffectProcessor } from '@azure/communication-calling';
import { CompositeLocale } from '../../localization';
import { CallCompositeIcons } from '../../common/icons';
import { ActiveNotification } from "../../../../../react-components/src";
/** @private */
export declare const ROOM_NOT_FOUND_SUB_CODE = 5732;
/** @private */
export declare const ROOM_NOT_VALID_SUB_CODE = 5829;
/** @private */
export declare const NOT_INVITED_TO_ROOM_SUB_CODE = 5828;
/** @private */
export declare const INVITE_TO_ROOM_REMOVED_SUB_CODE = 5317;
/** @private */
export declare const CALL_TIMEOUT_SUB_CODE = 10004;
/** @private */
export declare const CALL_TIMEOUT_CODE = 487;
/** @private */
export declare const BOT_TIMEOUT_CODE = 486;
/** @private */
export declare const BOT_TIMEOUT_SUB_CODE = 10321;
/**
 * @private
 */
export declare const isCameraOn: (state: CallAdapterState) => boolean;
/**
 * Reduce the set of call controls visible on mobile.
 * For example do not show screenshare button.
 *
 * @private
 */
export declare const reduceCallControlsForMobile: (callControlOptions: CallControlOptions | boolean | undefined) => CallControlOptions | false;
/**
 * Helper function for determine strings and icons for end call page
 * @private
 */
export declare const getEndedCallPageProps: (locale: CompositeLocale, endedCall?: CallState) => {
    title: string;
    moreDetails?: string;
    disableStartCallButton: boolean;
    iconName: keyof CallCompositeIcons;
};
/**
 * type definition for conditional-compilation
 */
type GetCallCompositePageFunction = ((call: CallState | undefined, previousCall: CallState | undefined) => CallCompositePage) & ((call: CallState | undefined, previousCall: CallState | undefined, transferCall?: CallState, isReturningFromBreakoutRoom?: boolean) => CallCompositePage);
/**
 * Get the current call composite page based on the current call composite state
 *
 * @param Call - The current call state
 * @param previousCall - The state of the most recent previous call that has ended.
 *
 * @remarks - The previousCall state is needed to determine if the call has ended.
 * When the call ends a new call object is created, and so we must lookback at the
 * previous call state to understand how the call has ended. If there is no previous
 * call we know that this is a fresh call and can display the configuration page.
 *
 * @private
 */
export declare const getCallCompositePage: GetCallCompositePageFunction;
/** @private */
export declare const IsCallEndedPage: (page: CallCompositePage) => boolean;
/**
 * Creates a new call control options object and sets the correct values for disabling
 * the buttons provided in the `disabledControls` array.
 * Returns a new object without changing the original object.
 * @param callControlOptions options for the call control component that need to be modified.
 * @param disabledControls An array of controls to disable.
 * @returns a copy of callControlOptions with disabledControls disabled
 * @private
 */
export declare const disableCallControls: (callControlOptions: CallControlOptions | boolean | undefined, disabledControls: (keyof CallControlOptions)[]) => CallControlOptions | boolean | undefined;
/**
 * Check if a disabled object is provided for a button and returns if the button is disabled.
 * A button is only disabled if is explicitly set to disabled.
 *
 * @param option
 * @returns whether a button is disabled
 * @private
 */
export declare const isDisabled: (option: boolean | {
    disabled: boolean;
} | undefined) => boolean;
/**
 * Check if we are using safari browser
 * @private
 */
export declare const _isSafari: (environmentInfo: undefined | EnvironmentInfo) => boolean;
/**
 * @private
 * This is the util function to create a participant modifier for remote participantList
 * It memoize previous original participant items and only update the changed participant
 * It takes in one modifier function to generate one single participant object, it returns undefined if the object keeps unmodified
 */
export declare const createParticipantModifier: (createModifiedParticipant: (id: string, participant: RemoteParticipantState) => RemoteParticipantState | undefined) => AdapterStateModifier;
/** @private */
export declare const getBackgroundEffectFromSelectedEffect: (selectedEffect: VideoBackgroundEffect | undefined, VideoBackgroundEffectsDependency: VideoBackgroundEffectsDependency) => VideoEffectProcessor | undefined;
/**
 * @remarks this logic should mimic the onToggleCamera in the common call handlers.
 * @private
 */
export declare const getSelectedCameraFromAdapterState: (state: CallAdapterState) => VideoDeviceInfo | undefined;
/**
 * Helper to determine if the adapter has a locator or targetCallees
 * @param locatorOrTargetCallees
 * @returns boolean to determine if the adapter has a locator or targetCallees, true is locator, false is targetCallees
 * @private
 */
export declare const getLocatorOrTargetCallees: (locatorOrTargetCallees: CallAdapterLocator | StartCallIdentifier[]) => locatorOrTargetCallees is import("@azure/communication-common").CommunicationIdentifier[];
/**
 * @private
 */
export type ComplianceState = 'on' | 'off' | 'stopped';
/**
 * Return different conditions based on the current and previous state of recording and transcribing
 *
 * @param callRecordState - The current call record state: on, off, stopped
 * @param callTranscribeState - The current call transcribe state: on, off, stopped
 *
 * @remarks - The stopped state means: previously on but currently off
 *
 * @private
 */
export declare const computeVariant: (callRecordState: ComplianceState, callTranscribeState: ComplianceState) => ComplianceNotificationVariant;
/**
 * @private
 */
export type ComplianceNotificationVariant = 'noState' | 'recordingStarted' | 'transcriptionStarted' | 'recordingStopped' | 'transcriptionStopped' | 'recordingAndTranscriptionStarted' | 'recordingAndTranscriptionStopped' | 'recordingStoppedStillTranscribing' | 'transcriptionStoppedStillRecording';
/**
 * @private
 */
export type CachedComplianceNotificationProps = {
    latestBooleanState: {
        callTranscribeState?: boolean;
        callRecordState?: boolean;
    };
    latestStringState: {
        callTranscribeState: ComplianceState;
        callRecordState: ComplianceState;
    };
    lastUpdated: number;
};
/**
 * @private
 */
export declare function determineStates(previous: ComplianceState, current: boolean | undefined): ComplianceState;
/**
 * Compute compliance notification based on latest compliance state and cached props.
 * @private
 */
export declare function computeComplianceNotification(complianceProps: {
    callTranscribeState: boolean;
    callRecordState: boolean;
}, cachedProps: React.MutableRefObject<CachedComplianceNotificationProps>): ActiveNotification | undefined;
export {};
//# sourceMappingURL=Utils.d.ts.map