const app = getApp()
let subDomain = '' // 子域名,没有就等于
// const API_BASE_URL = 'https://apartmentcloud.xiaozhisz.cn/' // 主域名
const API_BASE_URL = 'http://test.zhiweisz.cn/' // 主域名
// const API_BASE_URL = 'https://yktms-cs.utsz.edu.cn/' // 主域名
import JSEncrypt from '../js_sdk/jsencrypt-Rsa/jsencrypt/jsencrypt.min.js';
function setCode(str, text) {
  let pubKey = str; // ES6 模板字符串 引用 rsa 公钥
  let encryptStr = new JSEncrypt();
  encryptStr.setPublicKey(pubKey); // 设置 加密公钥
  let data = encryptStr.encrypt(text.toString()); // 进行加密
  return data;
}
let tenantIdEnter='100'
function setTenantId(tenantId){
  tenantIdEnter=tenantId
  wx.setStorageSync('tenantId',tenantId)
}

const request = (url, method, data,id='',no='') => {
  wx.showLoading({
    title: '加载中'
  });
  let _url = API_BASE_URL + subDomain + url.replace("{id}",id)
  var userToken = wx.getStorageSync('token')
  let tenantId=tenantIdEnter//wx.getStorageSync('tenantId')
  if (method == "GET") {
    return new Promise((resolve, reject) => {
      let  header={}
      if(no=='0'){
        header={
          'Content-Type': 'application/json',
          'tenantId': tenantId
        }
      }else{
        header={
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + (userToken ? userToken.access_token : ''),
          'tenantId': tenantId
        }
      }
      wx.request({
        url: _url,
        method: method,
        data: data,
        dataType: 'json',
        header: header,
        success(request) {
          if (request.statusCode === 401) {
            wx.showToast({
              title: 'token已过期，请重新登录',
              duration: 2000,
              icon: 'none'
            })
            wx.reLaunch({
              url: '/pages/login/login',
              success: (res) => {
                wx.removeStorageSync('token')
              },
              fail: (res) => {
                console.log(res)
              }
            })
          }
          resolve(request.data)
          wx.hideLoading()
        },
        fail(error) {
          reject(error)
          wx.hideLoading()
        },
        complete(aaa) {
          // 加载完成
        }
      })
    })
  } else if (method == "POST") {
    return new Promise((resolve, reject) => {
      let  header={}
      console.log(no,'nonon')
      if(no=='0'){
        header={
          'tenantId': tenantId
        }
      }else{
        header={
          'Authorization': 'Bearer ' + (userToken ? userToken.access_token : ''),
          'tenantId': tenantId
        }
      }
      wx.request({
        url: _url,
        method: method,
        data: data,
        header: header,
        dataType: 'json',
        success(request) {
          if (request.statusCode === 401) {
            wx.showToast({
              title: 'token已过期，请重新登录',
              duration: 2000,
              icon: 'none'
            })
            wx.reLaunch({
              url: '/pages/login/login',
              success: (res) => {
                wx.removeStorageSync('token')
              },
              fail: (res) => {
                console.log(res)
              }
            })
          }
          resolve(request.data)
          wx.hideLoading()
        },
        fail(error) {
          reject(error)
          wx.hideLoading()
        },
        complete(aaa) {
          // 加载完成
        }
      })
    })
  }
}
const requestOne = (url, method, data) => {
  wx.showLoading({
    title: '加载中'
  });
  let _url = API_BASE_URL + subDomain + url
  let tenantId=tenantIdEnter//wx.getStorageSync('tenantId')
  return new Promise((resolve, reject) => {
    wx.request({
      url: _url,
      method: method,
      data: data,
      header: {
        'content-type': 'application/json',
        'tenantId': tenantId
      },
      dataType: 'json',
      success(request) {
        if (request.statusCode === 401) {
          wx.showToast({
            title: 'token已过期，请重新登录',
            duration: 2000,
            icon: 'none'
          })
          wx.reLaunch({
            url: '/pages/login/login',
            success: (res) => {
              wx.removeStorageSync('token')
            },
            fail: (res) => {
              console.log(res)
            }
          })
        }else if(request.statusCode === 400){
          // wx.showToast({
          //   title: 'token已过期，请重新登录',
          //   duration: 2000,
          //   icon: 'none'
          // })
          // wx.reLaunch({
          //   url: '/pages/login/login',
          //   success: (res) => {
          //     wx.removeStorageSync('signature')
          //     wx.removeStorageSync('token')
          //   },
          //   fail: (res) => {
          //     console.log(res)
          //   }
          // })
        }
        resolve(request.data)
        wx.hideLoading()
      },
      fail(error) {
        reject(error)
        wx.hideLoading()
      },
      complete(aaa) {
        // 加载完成
      }
    })
  })
}

const request1 = (url, method, data) => {
  wx.showLoading({
    title: '加载中'
  });
  let _url = API_BASE_URL + subDomain + url
  let tenantId=tenantIdEnter//wx.getStorageSync('tenantId')
  return new Promise((resolve, reject) => {
    wx.request({
      url: _url,
      method: method,
      data: data,
      header: {
        'content-type': 'application/x-www-form-urlencoded',
        'tenantId': tenantId
      },
      dataType: 'json',
      success(request) {
        if (request.statusCode === 401) {
          wx.showToast({
            title: 'token已过期，请重新登录',
            duration: 2000,
            icon: 'none'
          })
          wx.reLaunch({
            url: '/pages/login/login',
            success: (res) => {
              wx.removeStorageSync('token')
            },
            fail: (res) => {
              console.log(res)
            }
          })
        }
        resolve(request.data)
        wx.hideLoading()
      },
      fail(error) {
        reject(error)
        wx.hideLoading()
      },
      complete(aaa) {
        // 加载完成
      }
    })
  })
}
const request2 = (url, method, data) => {
  wx.showLoading({
    title: '加载中'
  });
  let _url = API_BASE_URL + subDomain + url
  var userToken = wx.getStorageSync('token')
  let tenantId=tenantIdEnter//wx.getStorageSync('tenantId')
  if (method == "GET") {
    return new Promise((resolve, reject) => {
      wx.request({
        url: _url,
        method: method,
        data: data,
        dataType: 'json',
        header: {
          'Content-Type': 'application/json',
          'tenantId': tenantId
        },
        success(request) {
          resolve(request.data)
          wx.hideLoading()
        },
        fail(error) {
          reject(error)
          wx.hideLoading()
        },
        complete(aaa) {
          // 加载完成
        }
      })
    })
  } else if (method == "POST") {
    return new Promise((resolve, reject) => {
      wx.request({
        url: _url,
        method: method,
        data: data,
        header: {
          'Authorization': 'Bearer ' + (userToken ? userToken.access_token : ''),
          'tenantId': tenantId
        },
        dataType: 'json',
        success(request) {
          if (request.statusCode === 401) {
            wx.showToast({
              title: 'token已过期，请重新登录',
              duration: 2000,
              icon: 'none'
            })
            wx.reLaunch({
              url: '/pages/login/login',
              success: (res) => {
                wx.removeStorageSync('token')
              },
              fail: (res) => {
                console.log(res)
              }
            })
          }
          resolve(request.data)
          wx.hideLoading()
        },
        fail(error) {
          reject(error)
          wx.hideLoading()
        },
        complete(aaa) {
          // 加载完成
        }
      })
    })
  }
}

const request3 = (url, method, data) => {
  wx.showLoading({
    title: '加载中'
  });
  let _url = subDomain + url
  var userToken = wx.getStorageSync('token')
  let tenantId=tenantIdEnter//wx.getStorageSync('tenantId')
  if (method == "GET") {
    return new Promise((resolve, reject) => {
      wx.request({
        url: _url,
        method: method,
        data: data,
        dataType: 'json',
        header: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + (userToken ? userToken.access_token : ''),
          'tenantId': tenantId
        },
        success(request) {
          if (request.statusCode === 401) {
            wx.showToast({
              title: 'token已过期，请重新登录',
              duration: 2000,
              icon: 'none'
            })
            wx.reLaunch({
              url: '/pages/login/login',
              success: (res) => {
                wx.removeStorageSync('token')
              },
              fail: (res) => {
                console.log(res)
              }
            })
          }
          resolve(request.data)
          wx.hideLoading()
        },
        fail(error) {
          reject(error)
          wx.hideLoading()
        },
        complete(aaa) {
          // 加载完成
        }
      })
    })
  } else if (method == "POST") {
    return new Promise((resolve, reject) => {
      wx.request({
        url: _url,
        method: method,
        data: data,
        header: {
          'Authorization': 'Bearer ' + (userToken ? userToken.access_token : ''),
          'tenantId': tenantId
        },
        dataType: 'json',
        success(request) {
          if (request.statusCode === 401) {
            wx.showToast({
              title: 'token已过期，请重新登录',
              duration: 2000,
              icon: 'none'
            })
            wx.reLaunch({
              url: '/pages/login/login',
              success: (res) => {
                wx.removeStorageSync('token')
              },
              fail: (res) => {
                console.log(res)
              }
            })
          }
          resolve(request.data)
          wx.hideLoading()
        },
        fail(error) {
          reject(error)
          wx.hideLoading()
        },
        complete(aaa) {
          // 加载完成
        }
      })
    })
  }
}
/**
 * 小程序的promise没有finally方法，自己扩展下
 */
Promise.prototype.finally = function (callback) {
  var Promise = this.constructor;
  return this.then(
    function (value) {
      Promise.resolve(callback()).then(
        function () {
          return value;
        }
      );
    },
    function (reason) {
      Promise.resolve(callback()).then(
        function () {
          throw reason;
        }
      );
    }
  );
}
const throttle = (fn,delay)=>{
  let oldDate = Date.now();
  return function(){
      let args = arguments;
      let newDate = Date.now();
      let that = this;
      if(newDate-oldDate>delay){
          fn.apply(that,args);
          //倘若时间差大于延长时间 就更新一次旧时间
          oldDate = Date.now();
      }
  }
}

module.exports = {
  request,
  request1,
  request2,
  requestOne,
  setCode,
  setTenantId,
  throttle,
  login: data => request1('oauth/token', 'POST', data), // 登录  
  oauthKey: (data) => request2('oauth/key', 'GET', data), // 登录code
  getDeviceItems: (data) => request('v1/device/get/items', 'POST', data), //获取设备
  getSiteList: (data) => request('v1/site/get/list', 'GET', data), //获取房间列表信息
  getIntegration: (data) => request('v1/card/get/integration', 'GET', data), //获取首页列表
  getuserInfo: (data) => request('v1/account/user/info', 'GET', data), //获取账号信息
  getSiteTenant: (data) => request('v1/site/get/tenant', 'GET', data), //获取已入住人员信息
  openLock: (data) => request('v1/device/isp/openLock', 'POST', data), //远程开门
  addCertificates: (data) => request('v1/device/add/certificate', 'POST', data), //添加凭证
  getOpenRecord: (data) => request('v1/device/get/open/record', 'POST', data), //获取开门数据
  getDeviceOperateUserInfo: (data) => request('v1/device/isp/operateUserInfo', 'POST', data), //获取开门数据
  bindDeviceSite: (data) => request('v1/device/bind/site', 'POST', data), //绑定房间
  unbindDeviceSite: (data) => request('v1/device/unbind/site', 'POST', data), //解除绑定房间
  unbindCard: (data) => request('v1/site/unbind/card', 'POST', data), //人员解绑房间
  sendCommand: (data) => request('v1/device/send/command', 'POST', data), //通用接口
  sendCommandOne: (data) => requestOne('v1/device/send/bleCommand', 'POST', data), //通用接口
  sendCommandGet: (data) => request('v1/device/send/command', 'GET', data), //通用接口
  ZGregisterDevice: (data) => request('v1/zg/registerDevice', 'POST', data), //ZG注册平台
  addCard: (data) => request('v1/card/add', 'POST', data), //创建人员（卡）
  bindCard: (data) => request('v1/site/bind/card', 'POST', data), //绑定房间
  deleteDevice: (data) => request('v1/device/delete/device', 'POST', data), //删除设备
  deleteZGDevice: (data) => request('v1/zg/deleteDevice', 'POST', data), //删除ZG设备
  getTree: (data) => request('v1/site/get/tree', 'GET', data), //获取房源tree
  getCertificates: (data) => request('v1/device/certificate/list', 'GET', data), //获取凭证列表
  ZGduserOperation: (data) => request('v1/zg/userOperation', 'POST', data), //添加人员
  getDeviceResult: (data) => request('v1/device/get/command/result', 'POST', data), //查询反馈日志列表
  deleteCertificates: (data) => request('v1/device/delete/certificate', 'POST', data), //凭证列表删除
  sendEmergence: (data) => request('v1/device/send/emergence', 'POST', data), //发送离线密码短信
  updatePush: (data) => request('v1/push/paas/update/push', 'POST', data), //修改反馈日志状态
  editPassword: (data) => request('v1/account/edit/password', 'POST', data), //修改登录账户
  fingerprintTransfer: (data) => request('v1/device/isp/fingerprintTransfer', 'POST', data), //添加指纹
  getDeviceRegisterManager: (data) => request('v1/device/isp/registerManager', 'POST', data), //重置添加管理员
  orderDeviceData: (data) => request('v1/device/order/deviceData', 'GET', data),//获取指定锁所有非703凭证数据
  updateCertificates: (data) => request('v1/device/update/certificate', 'POST', data),//凭证列表修改
  editStatusBySerial: (data,url) => request(url, 'GET', data),//凭证列表修改
  editPushBySerial: (data) => request('v1/device/editPush/bySerial', 'POST', data),//指纹ID记录传输
  registerDeviceAll:(data)=>request('v1/device/all/registerDevice', 'POST', data),//注册设备集成接口
  getlistNum:(data)=>request('v1/card/get/list', 'POST', data),//获取人员
  onlyTenant:(data)=>request('v1/card/only/tenant', 'GET', data),//查询房间和人员信息
  atCardUser: data=>requestOne('v1/account/at/cardUser', 'POST', data),//租客登录
  getConfig:data=>request('v1/auto/get/config', 'GET', data),
  getOperateList:data=>request('v1/log/operate/list', 'POST', data),
  getDepartmentUsers:(data,id)=>request('work/wechat/department/users/{id}', 'GET', data,id),//获取企业id
  getDepartment:data=>request('work/wechat/get/department', 'GET', data),//获取企业用户列表
  convertToUserid:data=>request('work/wechat/convert_to_userid', 'GET', data),//用openid换企业账号id
  createWXCardUser:data=>request('v1/card/create/WXCard/user', 'GET', data),//用openid换企业账号id
  getLeasesList:(data)=>request('v1/leases/get/list','POST',data),//获取合约

  getOpenId:data=>requestOne('work/wechat/jscode/session', 'GET', data),//获取openid

  editCertificate: (data) => requestOne('v1/card/ts/editCertificate', 'POST', data),//凭证状态修改
  tsdeleteCertificates: (data) => requestOne('v1/device/delete/certificate', 'POST', data), //凭证列表删除
  tsGetCertificate:(data)=>requestOne('v1/card/ts/getCertificate', 'POST', data),//租客端获取凭证列表
  tsAddCertificate:(data)=>requestOne('v1/card/ts/addCertificate', 'POST', data),//租客端添加凭证
  toWXCorpUser:(data)=>requestOne('v1/account/to/WXCorp/user', 'POST', data),//租客端登录
  getApartmentCardInfo:(data)=>requestOne('v1/account/get/apartmentCardInfo', 'POST', data),// 获取合同信息，交租订单
  createOrderPay:(data)=>requestOne('v1/pay/createOrder', 'POST', data),// 创建交租订单
  miniPrepayOrder:(data)=>requestOne('v1/pay/miniPrepayOrder','POST',data),//租客端创建订单
  minGetOpenLocks:(data)=>requestOne('v1/card/ts/getOpenLocks','POST',data),//租客端获取开锁记录
  getBleUnlockRecord:(data)=>requestOne('v1/card/ts/getBleUnlockRecord','POST',data),//租客端获取开锁记录
  updateCard:(data)=>requestOne('v1/account/edit/myKey','POST',data),
  getDeviceOperateUserInfo:(data)=>requestOne('v1/device/isp/operateUserInfo','POST',data), 
  // bleUnlockRecord: (data) => request('v1/zg/bleUnlockRecord','POST', data),//上传蓝牙开锁记录
  // bleRspRecord: (data) => request3('http://192.168.1.34:8900/iot/v1/ble/deviceReport','POST', data),//传输蓝牙返回数据包
}