import Emiter from 'Emiter';
import Loger from 'Loger';
import MessageTypes from 'MessageTypes';

// 日志对象
const loger = Loger.getLoger('H5Sass');

let confInfo = {};
class H5Sass extends Emiter {
  constructor() {
    super();
  }

  // Sass校验
  sassChecking(_confInfo) {
    loger.log('发起Sass校验', _confInfo);
    this.confInfo = _confInfo;

    // 密码校验
    if (this.confInfo.nopassword === 'true') {
      return this.sendPWDChecking();
    }

    // MD5校验
    this.sendMD5Checking();
  }

  // 入会校验
  sendPWDChecking() {
    let url = `http://${this.confInfo.portal}/3m/getCheckMeetinig.do?siteId=${this.confInfo.siteId}&classId=${this.confInfo.confId}&password=${this.confInfo.password}`;
    loger.log('会议密码校验', url);
    fetch(url, {
        timeout: 5000
      })
      .then(ret => {
        if (ret.status === 200) {
          return ret.text();
        } else {
          loger.error(`会议密码校验-网络异常.状态码:${ret.status}`);
          this.emit(MessageTypes.NET_ERROR);
          throw '';
        }
      })
      .then(ret => {
        if (ret === 'false') {
          loger.error(`会议密码校验-失败.`);
          return this.emit(MessageTypes.CONFERENCE_SHOW_WRONG_PASSWORD);
        }
        if (ret === 'true') {
          loger.log(`会议密码校验-成功.`);
          this.sendMD5Checking();
          return
        }
        loger.error(`会议密码校验-协议异常.`);
        this.emit(MessageTypes.PRO_ERROR);
      })
      .catch(err => {
        loger.error(`会议密码校验-异常.状态码:${err}`);
        this.emit(MessageTypes.NET_ERROR);
      });
  }

  // 发起入会
  sendMD5Checking() {
    let url = `http://${this.confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${this.confInfo.siteId}&meetingNumber=${this.confInfo.confId}&userId=${this.confInfo.userId}&userName=${this.confInfo.userName}&userType=${this.confInfo.userType}&nopassword=${this.confInfo.nopassword}&md5=${this.confInfo.md5}`;

    loger.log('H5SassMD5校验', url);

    fetch(url, {
        timeout: 5000
      })
      .then(ret => {
        if (ret.status === 200) {
          return ret.json();
        } else {
          loger.error(`H5SassMD5校验-网络异常.状态码:${ret.status}`);
          this.emit(MessageTypes.NET_ERROR);
          throw '';
        }
      })
      .then(ret => {
        if (ret.flag == "true") {
          if (ret.h5_mcu_list) {
            let server = ret.h5_mcu_list.split(";")[0];
            this.confInfo.MCUServerIP = server.split(":")[0];
            this.confInfo.MCUServerPort = server.split(":")[1];
          }
          this.confInfo.maxVideoChannels = ret.maxVideoChannels;
          this.confInfo.maxAudioChannels = ret.maxAudioChannels;
          this.confInfo.maxMediaChannels = this.confInfo.maxVideoChannels + this.confInfo.maxAudioChannels;
          loger.log('H5Sass校验完成');
          this.emit(H5Sass.SUCCESS);
        } else {
          loger.log('H5SassMD5校验-失败.');
          this.emit(MessageTypes.CONFERENCE_JOIN_FAILED);
        }
      })
      .catch(err => {
        loger.error(`H5SassMD5校验-异常.状态码:${err}`);
        this.emit(MessageTypes.NET_ERROR);
      });
  }

  // 获取会议详情
  getClassDetail() {
    let url = `http://${this.confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${this.confInfo.confId}`;

    loger.log('H5Sass获取Class详情.', url);

    fetch(url, {
        timeout: 5000
      })
      .then(ret => {
        if (ret.ok) {
          return ret.json();
        } else {
          loger.error(`H5Sass获取Class详情-网络异常.状态码:${ret.status}`);
          this.emit(MessageTypes.NET_ERROR);
          throw '';
        }
      })
      .then(ret => {
        if (ret.errorCode === 0) {
          loger.log('H5Sass获取Class详情完成');
          this.emit(MessageTypes.CONFERENCE_SHOW_DETAIL, ret);
        } else {
          loger.warn('H5Sass获取Class详情失败.');
          this.emit(MessageTypes.NET_ERROR);
        }
      })
      .catch(err => {
        loger.error(`H5Sass获取Class详情异常.状态码:${err}`);
        this.emit(MessageTypes.NET_ERROR);
      });
  }
}

H5Sass.prototype.SUCCESS = H5Sass.SUCCESS = 'h5sass.success';

export default new H5Sass;