declare namespace TUICallEngine {
  /**
   * create TUICallEngine instance
   * @link https://web.sdk.qcloud.com/component/trtccalling/doc/TUICallEngine/web/TUICallEngine.html#.createInstance
   */
  function createInstance(options: ITRTCCallingOptions): any;
  /**
   * destroy TUICallEngine instance
   */
  function destroyInstance(): Promise<void>;
  /**
   * set log level
   */
  function setLogLevel(level: LOG_LEVEL): void;
  /**
   * add event listener
   */
  function on(eventName: string, callback: () => void, context?: any): void;
  /**
   * remove event listener
   */
  function off(eventName: string, callback: () => void, context?: any): void;
  /**
   * init
   */
  function init(params: ILoginParams): Promise<void>;
  /**
   * login interface. All functions require login before you can use them.
   */
  function login(params: ILoginParams): Promise<any>;
  /**
   * logout interface
   */
  function logout(): Promise<void>;
  /**
   * one-to-one audio/video call.
   */
  function call(params: ICallParam): Promise<any>;
  /**
   * group call.
   */
  function groupCall(params: IGroupCallParam): Promise<any>;
  /**
   * invite others.
   */
  function inviteUser(params: IInviteUserParam): Promise<any>;
  /**
   * join in group call.
   */
  function joinInGroupCall(params: IJoinInGroupCallParam): Promise<any>;
  /**
   * accept.
   */
  function accept(): void;
  /**
   * reject.
   */
  function reject(): void;
  /**
   * hangup.
   */
  function hangup(): void;
  /**
   * openCamera to start local preview
   */
  function openCamera(videoViewDomID: HTMLElement | string): Promise<any>;
  /**
   * closeCamera to stop local preview
   */
  function closeCamera(): void;
  /**
   * start remote view
   */
  function startRemoteView(params: IStartViewParam): Promise<any>;
  /**
   * stop remote view
   */
  function stopRemoteView(params: IStopViewParam): Promise<any>;
  /**
   * open local microphone
   */
  function openMicrophone(): void;
  /**
   * close local microphone
   */
  function closeMicrophone(): void;
  /**
   * set video resolution: '480p' | '720p' | '1080p'
   */
  function setVideoQuality(profile: string): Promise<any>;
  /**
   * set video render parameters
   */
  function setVideoRenderParams(params: ITRTCRenderParams): Promise<any>;
  /**
   * switch call media type: 1 - audio;  2 - video
   */
  function switchCallMediaType (newMediaType:number): Promise<any>;
  /**
   * get device lists, deviceType: 'camera' | 'microphones'
   */
  function getDeviceList(deviceType:string): Promise<[]>;
  /**
   * switch device
   */
  function switchDevice(params: ISwitchDeviceParams): Promise<any>;
  /**
   * set self userInfo
   */
  function setSelfInfo(params: ISelfInfoParams): Promise<any>;
  /**
   * enable/disable AI voice
   */
  function enableAIVoice(enable: boolean): void;
}
export enum TUICallEvent {
  ERROR = 'onError',
  SDK_READY= 'sdkReady',
  INVITED= 'onInvited',
  USER_ACCEPT= 'onUserAccept',
  USER_ENTER= 'onUserEnter',
  USER_LEAVE= 'onUserLeave',
  REJECT= 'onReject',
  NO_RESP= 'onNoResp',
  LINE_BUSY= 'onLineBusy',
  CALLING_CANCEL= 'onCallingCancel',
  KICKED_OUT= 'onKickedOut',
  CALLING_TIMEOUT= 'onCallingTimeout',
  CALL_END= 'onCallEnd',
  CALLING_END= 'onCallEnd',
  USER_VIDEO_AVAILABLE= 'onUserVideoAvailable',
  USER_AUDIO_AVAILABLE= 'onUserAudioAvailable',
  USER_VOICE_VOLUME= 'onUserVoiceVolume',
  GROUP_CALL_INVITEE_LIST_UPDATE= 'onGroupCallInviteeListUpdate',
  CALL_TYPE_CHANGED= 'onCallTypeChanged',
  DEVICED_UPDATED= 'onDeviceUpdated',
  MESSAGE_SENT_BY_ME= 'onMessageSentByMe',
  ON_CALL_BEGIN= 'onCallBegin',
  ON_CALL_RECEIVED= 'onCallReceived',
  ON_CALL_CANCELED= 'onCallCanceled',
  ON_USER_NETWORK_QUALITY_CHANGED= 'onUserNetworkQualityChanged',
}
export enum TUICallType {
  AUDIO_CALL = 1,
  VIDEO_CALL = 2,
  DEVCIED_CAMERA= 'camera',
  DEVCIED_MICROPHONES= 'microphones',
}
export enum TUICallCameraPosition {
  FRONT = 0,
  BACK = 1,
}
export interface ITRTCCallingOptions {
  SDKAppID: number;
  tim?: any;
}
export interface ILoginParams {
  userID: string;
  userSig: string;
  assetsPath?: string;
}
export interface ICallParam {
  userID: string;
  type: CALL_TYPE;
  timeout?: number;
  offlinePushInfo?: OfflinePushInfo;
  roomID?: number;
  userData?: string;
}
export enum CALL_TYPE {
  UNKNOWN = 0,
  AUDIO_CALL = 1,
  VIDEO_CALL = 2
}
export interface OfflinePushInfo {
  title?: string,
  description?: string, 
  androidOPPOChannelID?: string,
  extension: String
}
export interface IGroupCallParam {
  userIDList: string[];
  type: CALL_TYPE;
  groupID: string;
  timeout?: number;
  offlinePushInfo?: OfflinePushInfo;
  roomID?: number;
  userData?: string;
}
export interface IJoinInGroupCallParam {
  type: CALL_TYPE;
  groupID: string;
  roomID: number;
}
export interface IInviteUserParam {
  userIDList: string[];
  offlinePushInfo?: OfflinePushInfo;
}
export interface IStopViewParam {
  userID: string;
}
export declare const CMD_TYPE_LIST: string[];
export declare enum CMD_TYPE {
  AUDIO_CALL = "audioCall",
  VIDEO_CALL = "videoCall",
  HANG_UP = "hangup",
  SWITCH_TO_AUDIO = "switchToAudio",
  SWITCH_TO_AUDIO_CALL = "switch_to_audio_call",
  SWITCH_TO_VIDEO = "switchToVideo"
}
export declare enum CALL_STATUS {
  IDLE = "idle",
  CALLING = "calling",
  CONNECTED = "connected"
}
export declare enum CALL_ROLE {
  UNKNOWN = "",
  INVITER = "inviter",
  INVITEE = "invitee"
}
export declare enum ACTION_TYPE {
  INVITE = 1,
  CANCEL_INVITE = 2,
  ACCEPT_INVITE = 3,
  REJECT_INVITE = 4,
  INVITE_TIMEOUT = 5
}
export declare enum BUSINESS_ID {
  SIGNAL = 1
}
export declare const VALID_VIDEO_PROFILE_LIST: string[];
export declare enum MODE_TYPE {
  AUDIO = "audio",
  VIDEO = "video"
}
export declare enum LOG_LEVEL {
  NORMAL = 0,
  RELEASE = 1,
  WARNING = 2,
  ERROR = 3,
  NONE = 4,
}
export interface ISwitchDeviceParams {
  deviceType: 'video' | 'audio';
  deviceId: string;
}
export declare enum CALL_EXPERMENTEL_API_TYPE {
  BASE,
  PRO,
  ULTIMATE
}
export declare enum DEVICE_TYPE {
  AUDIO = "audio",
  VIDEO = "video",
  CAMERA = "camera",
  MICROPHONES = "microphones"
}
export interface ISelfInfoParams {
  nickName?: string;
  avatar?: string;
}
export interface IGenerateCallEndDataParams {
  roomId?: number;
  callMediaType?: CALL_TYPE;
  callRole?: CALL_ROLE;
  totalTime?: number;
  userId?: string;
}
export interface ITRTCRenderParams {
  userID?: string;
  objectFit?: string;
  muted?: boolean;
  mirror?: boolean;
}
export interface IOnCallEndData {
  roomID: number;
  callMediaType: CALL_TYPE;
  callRole: CALL_ROLE;
  callEnd?: number;
  totalTime: number;
  userID: string;
}
export interface ITRTCClientOptions {
  sdkAppID: number;
  userID: string;
  userSig: string;
  tuiCallEngine: any;
  assetsPath?: string;
}
export interface IPlayVideoOptions {
  objectFit?: string;
  muted?: boolean;
  mirror?: boolean;
}
export interface IPlayVideoParams {
  domID: string;
  type: 'local' | 'remote';
  userID: string;
  options?: IPlayVideoOptions;
}
export interface IStopVideoParams {
  type: 'local' | 'remote';
  userID: string;
}
export interface IStartViewParam {
  userID: string;
  videoViewDomID: string;
  options?: IPlayVideoOptions;
}
export interface IHangupParams {
  userIDList: string[];
  callType: CALL_TYPE;
  callEnd?: number;
}
export interface IInviteeAcceptedParams {
  name: string;
  data: {
    invitee: string;
    inviteID: string;
    inviter: string;
    groupID: string;
    data: string;
  };
}
export interface ITSignalClientOptions {
  SDKAppID: number;
  tim?: any;
  isRejectNotifyAll?: boolean;
}
export interface IInvitationReceivedParams {
  data: {
    inviter: string;
    inviteeList: string[];
    data: string;
    inviteID: string;
    groupID: string;
    inCallUserIDs: string[];
  };
}
export interface IInviteeRejectedParams {
  data: {
    inviteID: string;
    inviter: string;
    groupID: string;
    invitee: string;
    data: string;
  };
}
export interface IInvitationCancelledParams {
  data: {
    inviteID: string;
    inviter: string;
    groupID: string;
    data: string;
  };
}
export interface InvitationTimeoutParams {
  data: {
    inviter: string;
    inviteeList: string[];
    inviteID: string;
    groupID: string;
    isSelfTimeout: boolean;
  };
}
export interface ILoginParams {
  userID: string;
  userSig: string;
  assetsPath?: string;
}
export interface IInviteParams {
  userID: string;
  type: CALL_TYPE;
  roomId: number;
  strRoomId: string;
  timeout: number;
  offlinePushInfo?: OfflinePushInfo;
  userIDList?: string[];
  userData?: string;
}
export interface IInviteInGroupParams {
  groupID: string;
  userIDList: string[];
  roomID: number;
  strRoomId: string;
  type: CALL_TYPE;
  timeout: number;
  inCallUserIDs?: string[];
  offlinePushInfo?: OfflinePushInfo;
  userData?: string;
}
export interface IAcceptParams {
  inviteID: string;
  callType: CALL_TYPE;
  switch_to_audio_call?: string;
}
export interface IRejectParams {
  inviteID: string;
  callType: CALL_TYPE;
  isBusy: boolean;
}
export interface ICancelParams {
  inviteID: string;
}
export interface ISwitchParams {
  userID: string;
  callType: CALL_TYPE;
  roomID: number;
  timeout: number;
  mode: MODE_TYPE;
}
