<template>
  <web-view class="webview"    @message="webLoad" style="flex: 1;" :src="config.h5Url"></web-view>
</template>
<script setup>
import { ref } from 'vue'
import config from "../../config";
import {onExit } from "@dcloudio/uni-app";
import { Communication } from '../../utils/communication.js';
const commun=new Communication()

 import {
   registerRequestPermissionTipsListener,
   unregisterRequestPermissionTipsListener,
   setRequestPermissionTips
 } from "@/uni_modules/uni-registerRequestPermissionTips"

 const PermissionTips = {
   "android.permission.CAMERA": "<h4 style=\"font-size:40px;\">正在读取通讯录权限</h4><font color=#cccccc>通讯录权限不会获取任何信息，请注意</font>",
   "android.permission.READ_PHONE_STATE": "<h4 style=\"font-size:40px;\">正在读取网络状态权限</h4><font color=#cccccc>通讯录权限不会获取任何信息，请注意通讯录权限不会获取任何信息，请注意通讯录权限不会获取任何信息，请注意</font>"
 }
onExit(()=>{
  unregisterRequestPermissionTipsListener()
})

 const brand = uni.getSystemInfoSync().deviceBrand
 setRequestPermissionTips(PermissionTips)
 registerRequestPermissionTipsListener({
   onRequest: (e) => {
     console.log('onRequest',e)
   },
   onConfirm: (e) => {
     commun.sendToH5('permission-application',{action:'open-permission',data:e});
   },
   onComplete: (e) => {
     commun.sendToH5('permission-application',{action:'close-permission',data:e});

     // 华为手机在权限禁止之后，再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限，不应该频繁申请。
     if (brand.toLowerCase() === "huawei") {
       const tips = {}
       let hasDeniedPermission = false
       for (let k in PermissionTips) {
         if (e[k] !== "denied") {
           tips[k] = PermissionTips[k]
         } else {
           hasDeniedPermission = true
         }
       }
       setRequestPermissionTips(tips) // 更新弹框提醒，防止华为手机不出现权限申请框时权限提醒框闪烁的情况
       if (hasDeniedPermission)
         uni.showModal({
           content: "权限已经被拒绝，请前往设置中开启"
         })
     }
   }
 })
function initializeWebView() {
  const currentWebview = getCurrentPages().pop().$getAppWebview()
  commun.setWebView(currentWebview.children()[0])
}
//load-complete 注册函数
commun.registerHandler('load-complete',()=>{
  initializeWebView()
  const {statusBarHeight} = uni.getSystemInfoSync()
  commun.webViewObj.setStyle({
    top: statusBarHeight,
    bottom: 0,
  })

})
commun.registerHandler('getLocation',(data)=>{
  uni.getLocation({
    type:'gcj02',
    geocode:true,
    isHighAccuracy:true,
    ...data,
    success: (res) => {
      console.log('getLocation',res)
      commun.sendToH5('getLocation',res);
    },
  })
})
const webLoad = (e) => {
  const message = e.detail.data?.[0] || '';
  commun.handleMessage(message);
};
</script>

<style>

</style>
