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

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

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

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

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

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

  // 入会校验
  sendPWDChecking() {
    let url = `http://${confInfo.portal}/3m/getCheckMeetinig.do?siteId=${confInfo.siteId}&classId=${confInfo.confId}&password=${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://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.confId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.nopassword}&md5=${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];
            confInfo.MCUServerIP = server.split(":")[0];
            confInfo.MCUServerPort = server.split(":")[1];
          }
          console.log(ret);
          confInfo.maxVideoChannels = ret.maxVideoChannels;
          confInfo.maxAudioChannels = ret.maxAudioChannels;
          confInfo.maxMediaChannels = confInfo.maxVideoChannels + confInfo.maxAudioChannels;
          loger.log('H5Sass校验完成');

          this._emit(Sass.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://${confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${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);
      });
  }

  getMeetingParm(){
    console.log("getMeetingParm------------------------");
    //http://112.126.80.182/3m/meeting/getMeetingParam.do?meetingNumber=1653304953
    //let url = `http://${confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${confInfo.confId}`;
    let url = `http://${confInfo.portal}/3m/meeting/getMeetingParam.do?meetingNumber=${confInfo.confId}&device=flashplayer`;
    loger.log('H5Sass获取MeetingParam.', url);

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

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

export default new Sass;