// @ts-ignore
import { aiAssistant } from '../../Components/components/common/AIAssistant/index';
import { getRemoteUserProfile } from './utils';

interface IAIAssistant {
  enableAISubtitle: (enable: boolean) => void;
  setEngineInstance: (engineInstance: any) => void;
  setImInstance: (imInstance: any) => void;
};

export class AIAssistant implements IAIAssistant {
  static instance: IAIAssistant;
  private _tuiCallEngine: any = null;
  private _imInstance: any = null;

  static getInstance() {
    if (!AIAssistant.instance) {
      AIAssistant.instance = new AIAssistant();
    }
    return AIAssistant.instance;
  }

  public enableAISubtitle(enable: boolean): void {
    this._tuiCallEngine?.reportLog?.({
      name: 'TUICallKit.enableAISubtitle.start',
      data: { enable },
    });

    const trtcCloudInstance = this._tuiCallEngine.getTRTCCloudInstance();
    const getNickName = async(userId: string) => {
      const res = await getRemoteUserProfile([userId], this._imInstance);
      return res.length ? res[0] : [];
    }
    if (enable) {
      aiAssistant.initASR({
        trtcCloudInstance,
        // @ts-ignore
        getNickName,
      });
    } else {
      aiAssistant.destroyASR();
    }
  }

  public setEngineInstance(engineInstance: any): void {
    this._tuiCallEngine = engineInstance;
  }
  public setImInstance(imInstance: any): void {
    this._imInstance = imInstance;
  }
}
