<template>
	<view class="content">
    <view v-if="!showConnect">
      <button class="button" v-if="showAdd" @click="getList">添加设备</button>
      <button class="button" v-else @click="stopGetList">停止搜索</button>
      <view class="device-list" v-for="(item, index) in deviceList" :key="item.deviceId" @click="connect(item)">{{item.name}}</view>
    </view>
    <view v-else>
      <button class="button" @click="bindUser">添加用户</button>
      <button class="button" @click="openDoorOperate">开门</button>
      <button class="button" @click="closeDoorOperate">关门</button>
      <button class="button" @click="reset">恢复出厂设置</button>
      <button class="button" @click="getLockStatusResult">获取锁状态</button>
      <view>名称：{{currentLockInfo.name}}</view>
      <view>设备Id：{{currentLockInfo.deviceId}}</view>
    </view>
	</view>
</template>

<script>
  import { useBluetoothStore } from '@/stores/bluetooth'
  import { mapState, mapActions } from 'pinia'

	export default {
		data() {
			return {
        showAdd: true,
        showConnect: false,
        keyId: '0',
        authUid: '294',
        onlineToken: '0'
      }
		},
    computed: {
      ...mapState(useBluetoothStore, ['deviceList', 'currentLockInfo'])
    },
    onLoad () {},
		methods: {
      ...mapActions(useBluetoothStore, ['getBluetoothDevices', 'stopGetBluetoothDevices', 'updateCurrentLockInfo',
        'connectBluetoothDevice', 'getPublicKey', 'getCommKey', 'getLockStatus', 'addLockUser', 'timestampToArray',
        'openDoor', 'resetDevice']),
      async openDoorOperate() {
        const { code } = await this.openDoor({
          name: this.currentLockInfo.name,
          uid: this.authUid,
          openMode: 0,
          openTime: parseInt(new Date().getTime() / 1000),
          onlineToken: this.onlineToken
        })
        console.log('开门返回', code)
      },
      async closeDoorOperate() {
        const { code } = await this.openDoor({
          name: this.currentLockInfo.name,
          uid: this.authUid,
          openMode: 32,
          openTime: parseInt(new Date().getTime() / 1000),
          onlineToken: this.onlineToken
        })
        console.log('关门返回', code)
      },
      async reset() {
        const { code } = await this.resetDevice({
          name: this.currentLockInfo.name,
          authUid: this.authUid,
          keyId: this.keyId
        })
        console.log('恢复出厂设置返回', code)
      },
      getList() {
        this.getBluetoothDevices()
        this.showAdd = false
      },
      stopGetList() {
        this.stopGetBluetoothDevices()
        this.showAdd = true
      },
      async connect(item) {
        this.updateCurrentLockInfo({
          name: item.name,
          deviceId: item.deviceId
        })
        const result = await this.connectBluetoothDevice()
        if(result) {
          this.showConnect = true
          this.stopGetBluetoothDevices()
        }
      },
      async bindUser() {
        const { code } = await this.getPublicKey(this.currentLockInfo.name)
        console.log('获取公钥返回', code)
        if(code !== 0) {
          return
        }
        const { code: getCommKeyCode } = await this.getCommKey(this.currentLockInfo.name, this.keyId, this.authUid,
              parseInt(new Date().getTime() / 1000))
        console.log('获取私钥返回', getCommKeyCode)
        if(getCommKeyCode !== 0) {
          return
        }
        const timestamp = parseInt(new Date().getTime() / 1000)
        const { code: addUserCode } = await this.addLockUser({
          name: this.currentLockInfo.name,
          keyId: this.keyId,
          authUid: this.authUid,
          uid: this.authUid,
          publicKey: this.currentLockInfo.publicKey,
          commKey: this.currentLockInfo.commKey,
          openMode: 1,
          keyType: 1,
          startDate: timestamp,
          expireDate: 0xffffffff,
          useCountLimit: 0xffff,
          isRound: 0,
          weekRound: 0,
          startHour: 0,
          startMin: 0,
          endHour: 0,
          endMin: 0,
          role: 0xff,
          password: (Math.floor(Math.random() * 900000) + 100000).toString()
        })
        console.log('添加用户返回', addUserCode)
      },
      getLockStatusResult() {
        const timnestamp = parseInt(new Date().getTime() / 1000)
        this.getLockStatus({
          name: this.currentLockInfo.name,
          uid: this.authUid,
          nowTime: timnestamp,
          localTime: timnestamp
        })
      }
		}
	}
</script>

<style lang="scss" scoped>
	.content {
    padding-top: 160rpx;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.button {
    margin-top: 40rpx;
    width: 400rpx;
    height: 108rpx;
    line-height: 108rpx;
    background: #3F536E;
    color: #ffffff !important;
  }

  .device-list {
    margin-top: 10rpx;
    height: 100rpx;
    width: 500rpx;
    line-height: 100rpx;
    text-align: center;
    border: #dd524d solid 2rpx;
  }
</style>
