<template>
  <view class="flex flex-col justify-center items-center pt-[30vh]">
    <view v-if="requestFinish">
      <view
        v-if="!isAuthorized"
        class="bg-[#63b8af] text-white rounded-full text-center leading-88rpx h-88rpx w-686 mx-4"
        @click="handleAuthorize"
      >
        授权
      </view>
      <view v-else>
        <view v-if="!reject" class="text-center text-2xl font-bold">您已授权</view>
        <view v-else>
          <view class="text-center text-lg font-bold mt-6"> 您已拒绝授权，请去设置中 </view>
          <view class="text-center text-lg font-bold mt-4">
            打开<text class="text-red">语音、视频通话提醒</text>开关
          </view>
          <view
            class="bg-[#63b8af] text-white rounded-full text-center leading-88rpx h-88rpx w-686 mx-4 mt-10"
            @click="openSetting"
          >
            打开设置
          </view>
        </view>
      </view>
    </view>
    <view v-if="requestFinish" class="mt-10 text-center text-base font-bold text-[#999]">
      授权后，在设备上按下门铃按钮
    </view>
    <view v-if="requestFinish" class="mt-4 text-center text-base font-bold text-[#999]">
      微信会收到视频通话请求
    </view>
  </view>
</template>

<script setup>
  import { onShow } from '@dcloudio/uni-app'
  import { ref } from 'vue'
  import { passthrough } from '@/api/sdk'
  import { useBluetoothStore } from '@/stores/bluetooth'
  import env from '@/config/env'
  import { getStorage } from '@/utils/storage'

  const $bluetooth = useBluetoothStore()

  const requestFinish = ref(false)

  const isAuthorized = ref(false)
  const list = ref([])

  const reject = ref(false)

  const pending = ref(false)

  onShow(() => {
    uni.showLoading({
      title: '加载中...'
    })
    wx.getDeviceVoIPList({
      async success(res) {
        list.value = res.list
        if (res.list.length > 0) {
          const result = await getInfo()
          if (result.code === 0) {
            const data = list.value.find(item => item.sn === result.data.WXIoTDeviceInfo.SN)
            if (data) {
              if (data.status === 1) {
                if (reject.value) {
                  passthrough({
                    request_method: 'POST',
                    request_uri: '/api/v1/tencentYun/reportWechatAuthSuccess',
                    post_args: {
                      lockId: $bluetooth.currentLockInfo.lockId,
                      wxOpenid: getStorage('openid'),
                      wxDeviceSn: result.data.WXIoTDeviceInfo.SNTicket
                    }
                  })
                }
                reject.value = false
              } else if (data.status === 0) {
                reject.value = true
              }
              isAuthorized.value = true
              requestFinish.value = true
              uni.hideLoading()
            } else {
              requestFinish.value = true
              uni.hideLoading()
            }
          } else {
            uni.showToast({
              title: result.message,
              icon: 'none'
            })
            requestFinish.value = true
            uni.hideLoading()
          }
        } else {
          requestFinish.value = true
          uni.hideLoading()
        }
      }
    })
  })

  const openSetting = () => {
    uni.openSetting({
      success: res => {
        console.log(res)
      }
    })
  }

  const getInfo = async () => {
    const result = await passthrough({
      request_method: 'GET',
      request_uri: '/api/v1/tencentYun/getWechatDeviceTicket',
      post_args: {
        lockId: $bluetooth.currentLockInfo.lockId
      }
    })
    return result
  }

  const handleAuthorize = async () => {
    if (pending.value) return
    pending.value = true
    uni.showLoading({
      title: '授权中...'
    })
    const result = await getInfo()
    if (result.code === 0) {
      wx.requestDeviceVoIP({
        sn: result.data.WXIoTDeviceInfo.SN,
        snTicket: result.data.WXIoTDeviceInfo.SNTicket,
        modelId: result.data.WXIoTDeviceInfo.ModelId,
        deviceName: await env[await getApp().globalData.getEnvConfig()].appName,
        async success() {
          isAuthorized.value = true
          uni.hideLoading()
          pending.value = false
          passthrough({
            request_method: 'POST',
            request_uri: '/api/v1/tencentYun/reportWechatAuthSuccess',
            post_args: {
              lockId: $bluetooth.currentLockInfo.lockId,
              wxOpenid: getStorage('openid'),
              wxDeviceSn: result.data.WXIoTDeviceInfo.SNTicket
            }
          })
          uni.showToast({
            title: '授权成功',
            icon: 'none'
          })
        },
        fail() {
          isAuthorized.value = true
          reject.value = true
          uni.hideLoading()
          pending.value = false
          uni.showToast({
            title: '授权失败',
            icon: 'none'
          })
        }
      })
    } else {
      uni.hideLoading()
      pending.value = false
      uni.showToast({
        title: result.message,
        icon: 'none'
      })
    }
  }
</script>
