import axios from 'axios';
var QS = require('qs');
import tools from '../util/tools';
import User from '../model/User';
import UIConfirm from '../components/UIConfirm';
//param post参数  method 方法  isJsonString 是否转换为json字符串  isFree 是否需要认证信息
const tplusAjaxReq = (param: object, method: string, isJsonString?: boolean, isFree?: boolean, query?: string) => {
  param = param || {};
  method = method || '';
  isJsonString = isJsonString || false;

  let requestObj = {};
  //调用REST  传递的是单参数  String类型
  requestObj = QS.stringify({
    'Apis': JSON.stringify({
      ...param
    })
  });

  if (!User.isLogined()) {
    UIConfirm.show(`用户信息丢失,请重新登录!`, () => {
      User.logout();
    });
    return;
  }
  const user = User.restore();
  var ajax = axios.create({ baseURL: user.channel.targetURL });
  var url = `api/v2/${method}`;
  if (isFree) {
    url = url + '?IsFree=1&userId=' + user.userId + '&orgId=' + user.orgId;
  } else {
    url = url + '?userId=' + user.userId + '&orgId=' + user.orgId;
  }
  var user_req_id = `${user.userId}x${new Date().getTime().toString(16)}`;
  url += '&user_req_id=' + user_req_id;

  if (query) {
    url += '&' + query;
  }
  const startTime = new Date().getTime();
  return ajax.post(url, requestObj)
    .then(resp => {
      const endTime = new Date().getTime();
      console.log(`tApi:请求接口[${method}]成功,消耗时间${endTime - startTime}ms,时间${tools.sysTime()}`);
      return Promise.resolve(resp);
    }).catch(err => {
      const endTime = new Date().getTime();
      console.error(`tApi:请求接口[${method}]失败,消耗时间${endTime - startTime}ms,时间${tools.sysTime()},错误信息->`, err);
      return Promise.reject(err);
    });
}

const TplusApiV2 = async (param: object, method: string, isJsonString?: boolean, isFree?: boolean, query?: string): Promise<object | string> => {
  const resp = await tplusAjaxReq(param, method, isJsonString, isFree, query);
  let json = resp.data.Value;
  if (typeof (json) == 'string') {
    if (tools.isJsonStr(json)) {
      json = JSON.parse(resp.data.Value);
    }
  }
  return json;
}

export default TplusApiV2;