<template>
  <view class="weightPages">
    <view class="content">
      <view class="title" v-if="isConnection == 0">连接中，请稍后</view>
      <view class="title" v-if="isConnection == 1">连接成功，开始测量</view>
      <view class="title" v-if="isConnection == 2" @click="openBluetoothAdapter">连接失败，点击重新连接</view>
      <view class="text">{{text}}</view>
      <view class="image">
        <image src="/BLEPages/static/PCL11.gif" class="image3"></image>
      </view>
      <view class="tips">
        <text>提示：</text>
        <text>1.请确定设备是开机状态</text>
        <text>2.请确定手机蓝牙、位置信息已打开</text>
        <text>3.ios系统需打开设置—>应用—>微信里的蓝牙权限</text>
      </view>
    </view>
  </view>
</template>

<script>
  import {
    mapState
  } from "vuex";
  let myTime
  export default {
    data() {
      return {
        text: "",
        weight: "",
        height: "",
        imp: 0,
        macAddr: "",
        deviceId: "",
        Unload: false,
        stopblue: true,
        isConnection: 0, //是否连接成功
      }
    },
    computed: {
      ...mapState(["user", "isConnected", "isBluetoothTyle", "appTheme"]),
      info() {
        return this.user
      }
    },
    onUnload: function() {
      let that = this
      if (!that.Unload) {
        that.stopBluetoothDevicesDiscovery() //取消蓝牙搜索
        clearTimeout(myTime);
        that.closeBLEConnection()
        that.closeBluetoothAdapter()
      }
    },
    onLoad(options) {
      let that = this
      // 导航栏颜色
      uni.setNavigationBarColor({
        frontColor: '#ffffff',
        backgroundColor: that.appTheme,
      })
      that.text = ""
      if (options && options.deviceId) {
        that.deviceId = options.deviceId
        that.openBluetoothAdapter()
      }
      uni.onBluetoothAdapterStateChange(function(res) {
        that.$store.commit("changeBluetooth", res.available);
      })
    },
    watch: {
      isConnected: function() {
        let that = this
        if (!that.isConnected) {
          that.handleBack()
          that.isConnection = 2
        }
      },
      isBluetoothTyle: function() {
        let that = this
        if (!that.isBluetoothTyle) {
          that.handleBack()
          that.isConnection = 2
        }
      },
      stopblue: function() {
        let that = this
        if (!that.stopblue) {
          console.log("停止成功", that.weight, that.imp)
          if (that.imp == 0) {
            uni.showModal({
              title: '提示',
              content: "体脂测量失败，是否保存本次测量结果？",
              cancelText: "放弃",
              confirmText: "保存",
              success(res) {
                if (res.confirm) {
                  that.imp = 0
                  that.handleGetMeasure()
                } else {
                  that.Unload = true
                  that.startBluetoothDeviceDiscovery()
                  that.closeBLEConnection()
                  that.closeBluetoothAdapter()
                  uni.switchTab({
                    url: "/pages/index/index"
                  })
                }
              }
            })
          } else {
            that.handleGetMeasure()
          }

        }
      }
    },
    methods: {
      // 初始化蓝牙
      openBluetoothAdapter() {
        let that = this
        that.text = ""
        that.stopblue = true
        uni.openBluetoothAdapter({
          success: e => {
            that.isConnection = 0
            that.startBluetoothDeviceDiscovery()
          },
          fail: e => {
            that.isConnection = 2
            that.$tools.msg("请确定设备是开机状态、手机蓝牙权限已打开！")
          }
        });
      },
      // 开始搜寻附近的蓝牙外围设备
      startBluetoothDeviceDiscovery() {
        let that = this
        uni.startBluetoothDevicesDiscovery({
          allowDuplicatesKey: true,
          success: res => {
            that.isConnection = 0
            that.onBluetoothDeviceFound();
          },
          fail: res => {
            that.isConnection = 2
            that.$tools.msg("请确定设备是开机状态、手机蓝牙权限已打开！")
          }
        });
      },
      /**
       * 停止搜索蓝牙设备
       */
      stopBluetoothDevicesDiscovery() {
        uni.stopBluetoothDevicesDiscovery({
          success: e => {
            console.log("停止搜索蓝牙设备", e)
          },
        });
      },
      // // 监听蓝牙连接状态
      // onBLEConnectionStateChange() {
      //   let that = this
      //   uni.onBLEConnectionStateChange(function(res) {
      //     console.log("监听蓝牙连接状态", res.connected)
      //     if (!res.connected) {
      //       clearTimeout(myTime);
      //       that.text = ""
      //       that.Unload = true
      //       that.isConnection = 2
      //       that.stopBluetoothDevicesDiscovery()
      //       that.closeBLEConnection()
      //       that.closeBluetoothAdapter()
      //     }
      //     that.$store.commit("changeConnected", res.connected);
      //   })
      // },
      /**
       * 发现外围设备
       */
      onBluetoothDeviceFound() {
        var that = this;
        uni.onBluetoothDeviceFound(res => {
          res.devices.forEach(device => {
            device.advertisData = device.advertisData ? device.advertisData : ''
            if (!device.name && !device.localName) {
              let value = that.$tools.ab2hex(device.advertisData, "")
              let id = value.substring(12, 16)
              if (value.indexOf('c0') !== -1 && id == '0002') {
                that.isConnection = 1
                let buff = device.advertisData.slice(-6)
                device.mac = new Uint8Array(buff) // 保存广播数据中的mac地址，这是由于iOS不直接返回mac地址
                let tempMac = Array.from(device.mac)
                device.macAddr = that.$tools.ab2hex(tempMac, ':').toUpperCase()
                if (device.deviceId.indexOf(that.deviceId) !== -1 || device.macAddr.indexOf(that.deviceId) !== -1) {
                  let msg = parseInt(value.substring(16, 18), 16).toString(2)
                  let weight = parseInt(value.substring(4, 8), 16)
                  let type = msg.substring(5, 6) //0实时,1稳定
                  let num = msg.substring(3, 5) //小数点
                  let unit = msg.substring(1, 3) //单位
                  let dw1 = "kg"
                  if (unit == "10") {
                    dw1 = "lb"
                  }
                  if (num == "00") {
                    weight = parseInt(value.substring(4, 8), 16) / 10
                  }
                  if (num == "10") {
                    if (unit == "10") {
                      dw1 = "lb"
                      weight = parseInt(value.substring(4, 8), 16) / 10
                    } else {
                      weight = parseInt(value.substring(4, 8), 16) / 100
                    }
                  }
                  console.log("weight", type, weight, num, unit, dw1)
                  that.text = "您的体重是：" + weight + dw1
                  if (type == '1') {
                    that.macAddr = device.macAddr
                    that.deviceId = device.deviceId;
                    that.weight = weight + dw1
                    that.imp = parseInt(value.substring(8, 12), 16) / 10
                    console.log("测量完成", that.weight)
                    uni.stopBluetoothDevicesDiscovery({
                      success: e => {
                        return that.stopblue = false
                      },
                    });
                  }
                }
                return
              }
              return
            }
          })
        });
        that.handleMyTime()
      },
      handleMyTime() {
        var that = this;
        myTime = setTimeout(function() {
          if (!that.macAddr) {
            clearTimeout(myTime);
            that.Unload = true
            that.text = ""
            that.isConnection = 2
            that.startBluetoothDeviceDiscovery()
            that.closeBLEConnection()
            that.closeBluetoothAdapter()
          }
        }, 30000);
      },
      // 保存测量结果 
      handleGetMeasure() {
        let that = this
        that.$model.getmeasurefunit({
          weight: that.weight,
          imp: that.imp,
          ecode: that.macAddr,
          height: that.info.height,
          familyid: that.info.familyid,
        }).then(res => {
          if (res.code == 0) {
            that.$tools.msg("测量成功")
            that.$store.dispatch("getUserInfo", {
              familyid: that.info.familyid,
            });
            that.$store.dispatch("getResult", {
              birthday: that.info.birthday,
              familyid: that.info.familyid,
              height: that.info.height,
              sex: that.info.sex,
            });
          } else {
            console.log("测量失败", res.message)
            that.$tools.msg(res.message)
          }
          that.Unload = true
          setTimeout(function() {
            that.closeBLEConnection()
            that.closeBluetoothAdapter()
            uni.switchTab({
              url: "/pages/index/index"
            })
          }, 200)
        })
      },
      handleBack() {
        let that = this
        clearTimeout(myTime)
        that.Unload = true
        that.stopBluetoothDevicesDiscovery() //取消蓝牙搜索
        that.closeBLEConnection()
        that.closeBluetoothAdapter()
      },
      /**
       * 断开蓝牙模块
       */
      closeBluetoothAdapter() {
        let that = this;
        uni.closeBluetoothAdapter({
          success: res => {
            console.log('蓝牙模块关闭成功');
          }
        })
      },
      /**
       * 断开蓝牙连接
       */
      closeBLEConnection() {
        var that = this;
        uni.closeBLEConnection({
          deviceId: that.deviceId,
          success: res => {
            console.log('断开蓝牙连接成功');
          }
        });
      },
    },
  }
</script>

<style scoped lang="scss">
  .image3 {
    width: 200px !important;
    height: 340px !important;
  }
</style>
