import { App } from 'vue';
import { videoProfileMap } from 'trtc-sdk-v5';

declare const _default: {
    install(app: App): void;
};
export default _default;

export declare interface DeviceInfo {
    deviceId: string;
    groupId: string;
    kind: 'videoinput' | 'audioinput' | 'audiooutput';
    label: string;
}

declare type DeviceItem = Record<string, any>;

export declare class DeviceUtil {
    private static trtc;
    private static isOpenBasicBeauty;
    /**
     * 获取摄像头列表
     * @returns
     */
    static getCameraList(): Promise<DeviceItem[]>;
    /**
     * 获取麦克风列表
     * @returns
     */
    static getMicrophoneList(): Promise<DeviceItem[]>;
    /**
     * 获取扬声器列表
     * @returns
     */
    static getSpeakerList(): Promise<DeviceItem[]>;
    /**
     * 是否支持当前浏览器
     * @returns
     */
    static isSupported(): Promise<boolean>;
    /**
     * 测试视频
     * @param viewId
     */
    static testVideo(cameraId: string, viewId: string): Promise<void>;
    /**
     * 停止测试视频
     */
    static stopTestVideo(): Promise<void>;
    /**

     * 测试音频
     */
    static testAudio(microphoneId: string, handler: (microphoneId: string, volume: number) => void): Promise<void>;
    /**
     * 停止测试音频
     */
    static stopTestAudio(): Promise<void>;
    /**
     * 设置美颜
     * @returns
     */
    static setBasicBeauty(beauty: number, brightness: number, ruddy: number): Promise<void>;
}

export declare const PjTrtcWeb: {
    install(app: App): void;
};

export declare interface PjTrtcWebInstance {
    start: (params?: TRTCParams) => void;
    exit: () => void;
    setVideoDisplayName: (userId: string, displayName: string) => void;
    getCameraList: () => Promise<DeviceInfo[]>;
    getMicrophoneList: () => Promise<DeviceInfo[]>;
    switchCamera: (deviceId: string) => void;
    switchMicrophone: (deviceId: string) => void;
    setCurrentSpeaker: (deviceId: string) => void;
    setVideoProfile: (profile: keyof typeof videoProfileMap) => void;
    sendCustomMessage: (cmdId: number, msg: string) => void;
    switchFrontCamera: () => void;
    toggleVideo: () => Promise<boolean>;
    toggleAudio: () => Promise<boolean>;
    toggleScreenShare: () => Promise<boolean>;
    setBasicBeauty: (beauty: number, brightness: number, ruddy: number) => Promise<boolean>;
}

export declare interface PjTrtcWebProps {
    params?: TRTCParams;
    autoEnterRoom?: boolean;
}

export declare enum RoomEvents {
    EnterRoom = "EnterRoom",
    ExitRoom = "ExitRoom",
    KickedOut = "KickedOut",
    RemoteUserEnter = "RemoteUserEnter",
    RemoteUserExit = "RemoteUserExit",
    RemoteVideoAvailable = "RemoteVideoAvailable",
    RemoteVideoUnavailable = "RemoteVideoUnavailable",
    RemoteAudioAvailable = "RemoteAudioAvailable",
    RemoteAudioUnavailable = "RemoteAudioUnavailable",
    ScreenShareStopped = "ScreenShareStopped",
    CustomMessage = "CustomMessage",
    NetworkQuality = "NetworkQuality",
    ConnectionStateChanged = "ConnectionStateChanged",
    AudioPlayStateChanged = "AudioPlayStateChanged",
    VideoPlayStateChanged = "VideoPlayStateChanged",
    AudioVolume = "AudioVolume"
}

export declare interface TRTCParams {
    /** 房间ID */
    roomId: string | number;
    /** SDK应用ID */
    sdkAppId: string | number;
    /** 用户ID */
    userId: string;
    /** 用户签名 */
    userSig: string;
    /** 私有化key */
    privateMapKey?: string;
    /**  视频分辨率*/
    videoProfile?: keyof typeof videoProfileMap;
    /** 摄像头ID */
    cameraId?: string;
    /** 麦克风ID */
    microphoneId?: string;
    /** 扬声器ID */
    speakerId?: string;
    /** 是否打开摄像头 */
    openCamera?: boolean;
    /** 是否打开麦克风 */
    openMicrophone?: boolean;
}

export { }
