/// <reference types="node" />

import { EventEmitter } from 'events';

/**
 * Base audio effect.
 */
export declare interface AudioEffect {
    /**
     * This method is deprecated.
     * Please use the isSupported method on the AudioEffectsFeature API from
     * the main @azure/communication-calling package instead.
     * @deprecated
     */
    isSupported(): Promise<boolean>;
}

/**
 * Background blur config.
 */
export declare interface BackgroundBlurConfig extends VideoEffectConfig {
}

/**
 * Background blur effect
 */
export declare class BackgroundBlurEffect {


    /**
     * Name of the effect
     */
    readonly name: VideoEffectName;
    constructor(bgBlurConfig?: BackgroundBlurConfig);

    /**
     * Method to update effect config
     * @param newBgBlurConfig
     * @returns
     */
    configure(newBgBlurConfig: BackgroundBlurConfig): Promise<void>;
    /**
     * This method is deprecated.
     * Please use the isSupported method on the VideoEffectsFeature API from
     * the main @azure/communication-calling package instead.
     * @deprecated
     */
    isSupported(): Promise<boolean>;
    private _updateEffectConfig;
}

/**
 * Background replacement config.
 */
export declare interface BackgroundReplacementConfig extends VideoEffectConfig {
    backgroundImageUrl: string;
}

/**
 * Background replacement effect.
 */
export declare class BackgroundReplacementEffect {


    /**
     * Name of the effect
     */
    readonly name: VideoEffectName;
    constructor(bgReplacementConfig: BackgroundReplacementConfig);

    /**
     * Method to update effect config
     * @param newBgReplacementConfig
     * @returns
     */
    configure(newBgReplacementConfig: BackgroundReplacementConfig): Promise<void>;
    /**
     * This method is deprecated.
     * Please use the isSupported method on the VideoEffectsFeature API from
     * the main @azure/communication-calling package instead.
     * @deprecated
     */
    isSupported(): Promise<boolean>;
    private _updateEffectConfig;
}

/**
 * Deep noise suppression effect.
 */
export declare class DeepNoiseSuppressionEffect {


    /**
     * Name of the effect
     */
    readonly name: NoiseSuppressionEffectName;
    constructor();

    /**
     * This method is deprecated.
     * Please use the isSupported method on the AudioEffectsFeature API from
     * the main @azure/communication-calling package instead.
     * @deprecated
     */
    isSupported(): Promise<boolean>;
}

/**
 * Echo cancellation effect.
 */
export declare class EchoCancellationEffect {


    /**
     * Name of the effect
     */
    readonly name: EchoCancellationEffectName;
    constructor();

    /**
     * This method is deprecated.
     * Please use the isSupported method on the AudioEffectsFeature API from
     * the main @azure/communication-calling package instead.
     * @deprecated
     */
    isSupported(): Promise<boolean>;
}

/**
 * Represents echo cancellation effect names
 */
export declare type EchoCancellationEffectName = 'BrowserEchoCancellation' | 'EchoCancellation';

/**
 * Represents noise suppression effect names
 */
export declare type NoiseSuppressionEffectName = 'BrowserNoiseSuppression' | 'DeepNoiseSuppression';

/**
 * Base video effect.
 */
export declare interface VideoEffect {
    /**
     * Name of the video effect.
     */
    readonly name: VideoEffectName;
    /**
     * This method is deprecated.
     * Please use the isSupported method on the VideoEffectsFeature API from
     * the main @azure/communication-calling package instead.
     * @deprecated
     */
    isSupported(): Promise<boolean>;
}

/**
 * Base video effect config.
 */
export declare interface VideoEffectConfig {
    effectInitTimeThresholdInMs?: number;
    fpsWarningThreshold?: number;
}

/**
 * Video effect error type.
 */
export declare type VideoEffectError = 'FailedToProcess' | 'FailedToFetchImage';

/**
 * Video effect error payload.
 */
export declare type VideoEffectErrorPayload = {
    code: VideoEffectError;
    message: string;
};

/**
 * Name of the video effect.
 */
export declare type VideoEffectName = 'BackgroundBlur' | 'BackgroundReplacement';

export { }
