<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <view>
      <page-head :title="title"></page-head>
      <view class="uni-padding-wrap uni-common-mt">
        <view class="uni-btn-v uni-common-mt">
          <input class="uni-input" type="text" v-model="realName" name="real-name"
            placeholder="姓名" />
        </view>
        <view class="uni-btn-v uni-common-mt">
          <input class="uni-input" type="text" v-model="idCard" name="id-card"
            placeholder="身份证号" />
        </view>
        <view class="uni-btn-v uni-common-mt">
          <button type="primary" @click="facialRecognition">开始人脸识别</button>
        </view>
      </view>
    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script>
  export default {
    data() {
      return {
        title: '实人认证',
        realName: '',
        idCard: ''
      }
    },
    onReady() {
    },
    methods: {
      facialRecognition() {
        const realName = this.realName.trim()
        const idCard = this.idCard.trim()
        if (realName == '' || idCard == '') {
          uni.showModal({
            title: '错误',
            content: '姓名和身份证号不可为空',
            showCancel: false
          })
          return
        }
        const testFacialCo = uniCloud.importObject('facial-recognition-co')
        let metaInfo : string
        try {
          metaInfo = uni.getFacialRecognitionMetaInfo();
        } catch (e) {
          if (e.message!.indexOf('Failed resolution of') > -1) {
            uni.showModal({
              title: '提示',
              content: '注意：目前uni-app x内使用实人认证功能需要打包自定义基座。',
              showCancel: false
            })
          }
          throw e
        }
        testFacialCo.getCertifyId({
          realName,
          idCard,
          metaInfo
        })
          .then((res : UTSJSONObject) : Promise<string> => {
            const certifyId = res['certifyId'] as string
            return new Promise((
              resolve : (res : string) => void,
              reject : (err : Error) => void
            ) => {
              uni.startFacialRecognitionVerify({
                certifyId,
                success() {
                  resolve(certifyId)
                },
                fail(err) {
                  reject(new Error(err.errMsg))
                }
              })
            })
          })
          .then((certifyId : string) : Promise<UTSJSONObject> => {
            return testFacialCo.getAuthResult(certifyId)
          })
          .then((res : UTSJSONObject) => {
            console.log('res', res)
          })
          .catch((err : any | null) => {
            console.error('error', err)
          })
      }
    }
  }
</script>

<style>
</style>
