import axios from "axios";

function sendMessageToIframe(type, content) {
  // 业务里面的iframe
  const iframeEle = document.getElementById("myIframe");
  if (type && iframeEle !== null) {
    console.log(type, content);

    iframeEle.contentWindow.postMessage(
      {
        type,
        content,
      },
      "*"
    );
  }
}

function sendMessage(message) {
  sendMessageToIframe("message", message);
}

function textRender(message) {
  sendMessage({
    action: "TEXT_RENDER",
    body: message,
  });
}

function textQuery(message) {
  sendMessage({
    action: "TEXT_QUERY",
    body: message,
  });
}

function sendCommand(command) {
  sendMessageToIframe("command", command);
}

function mute(mute) {
  sendCommand({
    subType: "MUTE_CAMERA",
    subContent: mute,
  });
  // sendCommand({
  //   subType: "muteCamera",
  //   subContent: mute,
  // });
}

function setDrmlControl(action) {
  let result = "<client><widget><content>";
  result += action;
  result += "</content><action>";
  result += "control";
  result += "</action></widget></client>";
  return result;
}

function callHook(eventName, data) {
  if (this.eventObj[eventName]) {
    Promise.resolve().then(() => {
      this.eventObj[eventName](data);
    });
  }
}

function setParams(params) {
  let result = "";
  Object.keys(params).forEach((key) => {
    result += `${key}=${params[key]}&`;
  });
  result = result.slice(0, -1);
  return result;
}

class baiduDH {
  constructor(options) {
    this.eventObj = {};
    this.options = options;
    this.rtcStatus = false;
    this.isConnected = false;
    this.sessionId = "";
    this.allowInterrupt = true;
    this.data = {};
    this.url = options.playerUrl;
    this.display = options.display
    // this.url = `https://digitalhuman.baidu.com/cloud/react?appId=i-md0jnk2yhap5n&appKey=qnd10f5wy0h8t2ppu0x4&fullDuplex=false&usingAudio=true&usingVideo=false&ttsPitch=5&ttsSpeed=5&ttsVolume=3&directLogin=1&showControl=false&showBtn=true&showLogo=false&resolutionWidth=540&resolutionHeight=960&showTextAssist=false&showHistory=false&showQueryText=false&showReplyText=false&showWidget=false&welcome=%27%20%27`;
    // console.log("Window :>> ", typeof Window);
    this.isBroswer = typeof Window !== "undefined" ? true : false;
  }

  initPlayer() {
    // if (this.isBroswer && this.options.videosink !== "publish") {
    //   document.getElementById("demo").innerHTML = `<iframe
    //     id="myIframe"
    //     allow="microphone;camera;midi;encrypted-media;"
    //     src="${this.url}"
    //     title="myIframe"
    //   />`;
    //   // setTimeout(() => {
    //   //   callHook.call(this, "playing", {
    //   //     playerUrl: this.playerUrl,
    //   //     topic: this.sessionId,
    //   //   });
    //   // })
    // } else {
    Promise.resolve().then(() => {
      callHook.call(this, "loaded");
    });
    callHook.call(this, "resources", {
      playerIframe: `<iframe
        id="myIframe"
        height="100%"
        width="100%"
        allow="microphone;camera;midi;encrypted-media;"
        src="${this.url}"
        title="myIframe"
      />`,
      display: this.display
    });
    // }
  }

  initMessage() {
    // if (this.isBroswer) {
    //   if (typeof window.addEventListener !== "undefined") {
    //     window.addEventListener(
    //       "message",
    //       (msg) => {
    //         // console.log("msg",msg)
    //         const data = msg.data;
    //         const msgData = data.content;

    //         switch (data.type) {
    //           case "msg":
    //             // console.log("message :>> ", msgData);

    //             switch (msgData.action) {
    //               case "DOWN_CLIENT":
    //                 const body = JSON.parse(msgData.body);
    //                 switch (body.widget.action) {
    //                   case "control":
    //                     if (body.widget.content === "next") {
    //                       callHook.call(this, "next");
    //                     } else if (body.widget.content === "interruptAsk") {
    //                       callHook.call(
    //                         this,
    //                         "renderInterrupted",
    //                         body.widget.params
    //                       );
    //                     } else if (body.widget.content === "interruptBack") {
    //                       callHook.call(this, "renderBack");
    //                     }
    //                     return;
    //                   case "card":
    //                     callHook.call(this, "card", {
    //                       ...JSON.parse(body.widget.content),
    //                       resources: this.data,
    //                     });
    //                     break;
    //                   // case "show":
    //                   //   callHook.call(this, "card", {
    //                   //     ...JSON.parse(body.widget.content),
    //                   //     resources: this.data,
    //                   //     action: body.widget.action,
    //                   //   });
    //                   //   return;
    //                   // case "close":
    //                   //   callHook.call(this, "card", {
    //                   //     ...JSON.parse(body.widget.content),
    //                   //     action: body.widget.action,
    //                   //   });
    //                   //   return;
    //                 }
    //                 break;
    //               case "CONNECT":
    //                 if (msgData.code === 0) {
    //                   const body = JSON.parse(msgData.body);
    //                   this.isConnected = true;
    //                   this.sessionId = body.sessionId;

    //                   if (this.rtcStatus) {
    //                     callHook.call(this, "loaded", this.sessionId);
    //                   }
    //                 } else {
    //                   callHook.call(this, "initError", msgData.message);
    //                 }
    //                 break;
    //             }
    //             break;
    //           case "rtcState":
    //             console.log("rtcState :>> ", msg);
    //             if (msgData.action === "remotevideoon" && msgData.body === 1) {
    //               this.rtcStatus = true;
    //               callHook.call(this, "playing", {
    //                 playerUrl: this.playerUrl,
    //                 topic: this.sessionId,
    //               });
    //               if (this.isConnected) {
    //                 callHook.call(this, "loaded", this.sessionId);
    //               }
    //             }
    //             break;
    //         }
    //         callHook.call(this, "message", data);
    //       },
    //       false
    //     );
    //   } else {
    //     callHook.call(
    //       this,
    //       "websocketError",
    //       "window.addEventListener not supported"
    //     );
    //   }
    // }
    // } else {
    //   callHook.call(this, "initMessage");
    // }
  }

  play(url) {
    // document.getElementById(this.options.domId).innerHTML = url;
  }

  addEventListener(eventName, callback) {
    this.eventObj[eventName] = callback;
  }

  removeEventListener(eventName, callback) {
    if (this.eventObj[eventName] === callback) {
      delete this.eventObj[eventName];
    }
  }

  exec(mission, data, moreMessage) {
    let renderData = "";
    if (moreMessage) renderData += moreMessage;
    this.data = data;
    renderData += mission.text;
    // if (mission.auto === true) {
    renderData += setDrmlControl("next");
    // }
    console.log("exec :>> ", renderData);
    textRender(
      `<speak interruptible='${mission.interrupt}'>${renderData}</speak>`
    );
  }

  command(param) {
    if (param.type === "muteAudio") mute(param.value);
  }

  textRender(message) {
    if (this.isBroswer) textRender(message);
    else callHook.call(this, "textRender", message);
  }

  mute(value) {
    mute(value);
  }

  show(message) {
    textRender(message);
  }

  interrupt() {
    textRender(" ");
  }

  // textHandler(tag) {
  //   let result = [];
  //   let message = "";
  //   console.log("textHandler-1 :>> ", result);

  //   if (tag.type === "tag" && tag.name === "speak") {
  //     let auto = true;
  //     let interrupt = true;
  //     if(tag.attrs.interrupt !== undefined){
  //       interrupt = tag.attrs.interruptible === "true";
  //     }
  //     tag.children.forEach((item) => {
  //       console.log("tag :>> ", message, message.length);

  //       if (item.type === "text") {
  //         message += item.content;
  //       } else if (item.type === "tag") {
  //         if (item.name === "video") auto = false;
  //         const content = this.tagHandler(item);

  //         if (content) {
  //           message += content;
  //         } else {
  //           console.log("push-0 :>> ", message);

  //           if (message.length > 0) {
  //             console.log("push-1 :>> ", message);
  //             result.push({
  //               text: message,
  //               auto: auto,
  //               interrupt: interrupt,
  //             });
  //             message = "";
  //             auto = true;
  //           }
  //         }
  //       }
  //     });
  //     if (message.length > 0) {
  //       console.log("push-1 :>> ", message);
  //       result.push({
  //         text: message,
  //         auto: auto,
  //         interrupt: interrupt,
  //       });
  //       message = "";
  //       auto = true;
  //     }
  //   }
  //   console.log("textHandler-2 :>> ", result);
  //   return result;
  // }

  // tagHandler(tag) {
  //   switch (tag.name) {
  //     case "fusion":
  //       return this.fusionHandler(tag);
  //     case "audio":
  //       return this.audioHandler(tag);
  //     case "video":
  //       return this.videoHandler(tag);
  //     case "card":
  //       return this.cardHandler(tag);
  //     case "br":
  //       return null;
  //     default:
  //       return htmlParseStringify2.stringify([tag]);
  //   }
  // }

  // fusionHandler(tag) {
  //   let result = "<fusion>";
  //   tag.children.forEach((item) => {
  //     if (item.type === "text") {
  //       result += item.content;
  //     } else if (item.type === "tag" && item.name === "speak") {
  //       result += "<speak>";
  //       item.children.forEach((speakItem) => {
  //         if (speakItem.name === "content") {
  //           result += "<content>";
  //           speakItem.children.forEach((contentItem) => {
  //             if (contentItem.type === "text") {
  //               result += contentItem.content;
  //             } else result += this.tagHandler(contentItem);
  //           });
  //           result += "</content>";
  //         }
  //       });
  //       result += "</speak>";
  //     } else {
  //       result += htmlParseStringify2.stringify([item]);
  //     }
  //   });
  //   result += "</fusion>";
  //   return result;
  // }

  // audioHandler(tag) {
  //   let result = "";
  //   if (this.options.transition) {
  //     result += this.options.audioTransition || defaultAudioMessage;
  //   }
  //   result += htmlParseStringify2.stringify([tag]);
  //   return result;
  // }

  // videoHandler(tag) {
  //   let result = "";
  //   if (this.options.transition) {
  //     result += this.options.videoTransition || defaultVideoMessage;
  //   }
  //   result += "<client><widget><content>";
  //   result += htmlParseStringify2.stringify([tag]);
  //   result += "</content><action>";
  //   result += "video";
  //   result += "</action></widget></client>";
  //   return result;
  // }

  // cardHandler(tag) {
  //   let result = "<client><widget><content>";
  //   result += tag.attrs.content;
  //   result += "</content><action>";
  //   result += tag.attrs.action;
  //   result += "</action></widget></client>";
  //   return result;
  // }
}

export default baiduDH;
