/**
 * 公用的请求方法
 */
import io from 'socket.io-client'; //io進行通訊
import { Toast } from 'antd-mobile';

// 获取请求的地址
const getBaseUrl = () => {
  let cache = localStorage.getItem('ZZJ-base');
  if (!cache) {
    return null;
  }
  cache = JSON.parse(cache);
  const isDev = import.meta.env.MODE == 'development';
  return isDev ? cache.Address : `${cache.BASE_URL}${cache.Address}`;
};
/**
 * 
 * @param {*} code 接口地址
 * @param {*} params 接口请求的参数
 * @param {*} showError 接口请求失败时头部是否显示错误提示 默认不显示
 * @returns 
 */
export const fetchPost = function (code, params, showError = false) {
  const BASEURL = getBaseUrl();
  const isDev = import.meta.env.MODE == 'development';
  if (!BASEURL) {
    return;
  }
  return new Promise((resolve, reject) => {
    fetch(BASEURL, {
      method: 'post',
      mode: 'cors',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        // 241 Basic X3N5c3RlbTppcmlz== 
        // 1.6 Basic cHJoaXA6cHJoaXBAMjAyMA==
        'Authorization': isDev ? 'Basic X3N5c3RlbTppcmlz==' : 'Basic cHJoaXA6cHJoaXBAMjAyMA==',
        'Access-Control-Allow-Origin': '*',// httpConfig.reqIP
      },
      body: JSON.stringify({
        code,
        ...params,
      }),
    }).then((res) => {
      if (res.status === 200) {
        return res.json();
      } else {
        Toast.show({
          icon: 'fail',
          duration: 3000,
          content: res.errorMessage,
        });
        reject(res);
      }
    }).then((data) => {
      if (data.errorCode != 0) {
        showError && Toast.show({
          icon: 'fail',
          duration: 3000,
          content: data.errorMessage || data.errorCode || '请求出错',
        });
        reject(data);
      } else {
        resolve(data);
      }
    }).catch((error) => {
      console.error(error);
      reject(error);
    });
  });
};
// scoket创建
export const initSocket = (obj, getMessage) => {
  if (window.socket) {
    return;
  }
  window.socket = io(obj.serverIP + ':' + obj.serverPort, {
    reconnectionAttempts: 0,
    reconnection: true,
    transports: ['websocket'],
    forceNew: true,
    query: {
      type: 'C',
      deviceID: obj.deviceID,
    }
  });
  // window.socket = new WebSocket('http://m00.puruiit.cn:10015/socket.io/?type=C&deviceID=8e5604af-99db-47a5-b5e9-465040486690&EIO=4&transport=websocket');
  window.socket.on('connect_timeout', function () {
    console.log('connect_timeout');
    window.socket.close();
    window.socket = null;
    initSocket(obj, getMessage);
    Toast.show({
      duration: 10000,
      content: 'scoket连接超时',
    });
  });
  //服务器连接异常
  window.socket.on('connect_error', (e) => {
    console.log('connect_error', e);
    Toast.show({
      duration: 10000,
      content: 'scoket连接出错了' + e,
    });
    window.socket.close();
    window.socket = null;
    initSocket(obj, getMessage);
  });
  //服务器响应消息
  window.socket.on('callNumber', (data) => {
    // Toast.show({
    //   duration: 20000,
    //   content: data1.path+data1.voiceFileName,
    // });
    getMessage && getMessage(data);
  });
  window.socket.on('connect', function () {
    console.log('scoket连接成功');
    Toast.show({
      duration: 10000,
      content: '连接成功',
    });
  });

  window.socket.on('disconnect', function (e) {
    Toast.show({
      duration: 10000,
      content: '连接断开' + e,
    });
    // window.socket = null;
    // initSocket(obj, getMessage);
  });
  // todo 测试
  // getMessage({
  //   'locID': '1328',
  //   'locDesc': '住院手术室',
  //   'locENDesc': '',
  //   'purposeCode': 'OperLoc',
  //   'roomID': '',
  //   'roomDesc': '手术室',
  //   'roomENDesc': '',
  //    userData: {
  //     userImage:'',
  //     userDesc: '用户名',
  //     userTitleDesc: '职称',
  //     userIntroduce: '简介',
  //     userQrCode: 'http://localhost:5173/callapp/',
  //   },
  //   'callMsg': {
  //   'callPat': [{
  //       'patName': '北2号',
  //       'patSex': '男',
  //       'patAge': '24岁',
  //       'patOpeName': '可植入式隐形眼镜置入术[ICL置入术]',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     },
  //     {
  //       'patName': '北3号',
  //       'patSex': '男',
  //       'patAge': '23岁',
  //       'patOpeName': '白内障超声乳化抽吸术',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     },
  //     {
  //       'patName': '北1号',
  //       'patSex': '男',
  //       'patAge': '24岁',
  //       'patOpeName': '白内障超声乳化抽吸术',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     },
  //     {
  //       'patName': '北1号',
  //       'patSex': '男',
  //       'patAge': '24岁',
  //       'patOpeName': '白内障针吸术',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //   }],
  //   'waitPat': [{
  //       'patName': '北2号',
  //       'patSex': '男',
  //       'patAge': '24岁',
  //       'patOpeName': '可植入式隐形眼镜置入术[ICL置入术]',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     },
  //     {
  //       'patName': '北3号',
  //       'patSex': '男',
  //       'patAge': '23岁',
  //       'patOpeName': '白内障超声乳化抽吸术',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     },
  //     {
  //       'patName': '北1号',
  //       'patSex': '男',
  //       'patAge': '24岁',
  //       'patOpeName': '白内障超声乳化抽吸术',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     },
  //     {
  //       'patName': '北1号',
  //       'patSex': '男',
  //       'patAge': '24岁',
  //       'patOpeName': '白内障针吸术',
  //       'patOpeState': '术中',
  //       'patOpeRom': '1室'
  //     }
  //   ]},
  //     'readMsg': {},
  //     'areaID': '',
  //     'docName': '住院手术室',
  //     'deviceList': [{
  //       'deviceID': '4abda00d976b1fe2A1680F7A6D9B12655546D514A226FA476F90DA5'
  //     }]
  // });
};