<template>
  <fu-popup v-model="isShow" mode="center" border-radius="16" :mask-close-able="false">
    <view class="update-box">
      <view class="title">{{ $t('发现新版本') }}</view>
      <textarea class="content" disabled :value="content"></textarea>
      <view class="cu-progress sm striped active" v-if="loading > 0">
        <view class="bg-theme" :style="[{ width: loading + '%' }]"></view>
      </view>
      <view class="foot solid-top">
        <view class="flex-sub text-gray solid-right" @click="handleCancel">{{ $t('下次再说') }}</view>
        <view class="flex-sub text-green" @click="handleConfirm">{{ $t('马上更新') }}</view>
      </view>
    </view>
  </fu-popup>
</template>

<script>
/**
 * author: 刘欢
 * @description app检测升级组件
 * @param {boolean} auto 是否自动检测更新
 * **/
import { API_BASE_URL, SYSTEM_CONFIG } from '@/common/config.js'
export default {
  name: 'app-update',
  props: {
    auto: {
      type: Boolean,
      default: false,
    }, // 是否自动检测更新
  },
  data() {
    return {
      isShow: false,
      content: '',
      apkUrl: '',
      loading: 0,
      isLoad: false,
      downloadTask: null,
    }
  },
  methods: {
    checkAppUpdate() {
      console.log('检查更新')
      const self = this
      plus.runtime.getProperty(plus.runtime.appid, async function (widgetInfo) {
        console.log('本地版本信息', widgetInfo)
        // 请求版本检查接口
        const [error, result] = await uni.request({
          url: API_BASE_URL + global.apiUrls.publicUpdateAPP,
          header: {
            'content-type': 'application/x-www-form-urlencoded',
          },
          data: {
            app_ident: 'user',
            client: SYSTEM_CONFIG.platform === 'Android' ? 3 : 2,
          },
          method: 'POST',
        })
        console.log('result.data', result.data)
        if (result.data.code == 1) {
          const data = result.data.data
          console.log('接口信息', data)
          if (data.is_take == 1) {
            console.log('是有效的版本')
            if (data.type == 2) {
              console.log('是整包更新')
              if (data.version > widgetInfo.versionCode) {
                console.log('有新版本')
                self.content = data.readme
                self.apkUrl = data.url
                self.isShow = true
              } else {
                console.log('是否是自动检测', self.auto)
                if (!self.auto) {
                  console.log('??????')
                  self.$message.info(global.i18n.t('已是最新版本~'))
                }
              }
            } else {
              console.log('是热更新')
              if (data.version > widgetInfo.versionCode) {
                uni.downloadFile({
                  url: data.url,
                  success: (downloadResult) => {
                    if (downloadResult.statusCode === 200) {
                      plus.runtime.install(downloadResult.tempFilePath, {
                        force: true,
                      })
                      self.$util.showModal({
                        title: global.i18n.t('提示'),
                        content: global.i18n.t('已准备好新版本,是否重启体验新版?'),
                        confirmText: global.i18n.t('重启'),
                        success: (res) => {
                          if (res.confirm) {
                            plus.runtime.restart()
                          }
                        },
                      })
                    }
                  },
                })
              } else {
                console.log('是否是自动检测', self.auto)
                if (!self.auto) {
                  self.$message.info(global.i18n.t('已是最新版本~'))
                }
              }
            }
          }
        }
      })
    },
    // 取消
    handleCancel() {
      this.downloadTask && this.downloadTask.abort()
      this.isShow = false
    },
    // 确定
    handleConfirm() {
      /* #ifdef APP-PLUS */
      if (plus.os.name.toLowerCase() === 'android') {
        console.log('是安卓系统')
        if (this.isLoad) return
        this.isLoad = true
        this.downloadTask = uni.downloadFile({
          url: this.apkUrl,
          success: (downloadResult) => {
            console.log('downloadResult 下载成功', downloadResult)
            if (downloadResult.statusCode === 200) {
              this.isShow = false
              plus.runtime.install(downloadResult.tempFilePath, {
                force: true,
              })
              plus.runtime.restart()
            }
          },
          fail: (err) => {
            console.log('ERROR', err)
            if (err.errMsg == 'downloadFile:fail abort') {
              this.$message.info(global.i18n.t('取消下载'))
            } else {
              this.$message.info(global.i18n.t('下载失败'))
            }
          },
          complete: () => {
            this.isLoad = false
          },
        })
        this.downloadTask.onProgressUpdate((res) => {
          this.loading = res.progress
        })
      } else {
        console.log('是苹果系统,跳转到苹果应用商店')
        plus.runtime.openURL(this.apkUrl)
      }
      /* #endif */
    },
  },
  created() {
    // #ifdef APP-PLUS
    if (this.auto) {
      setTimeout(() => {
        this.checkAppUpdate()
      }, 2500)
    }
    // #endif
  },
}
</script>

<style lang="scss" scoped>
.update-box {
  width: 500rpx;
  background-color: #ffffff;

  .title {
    height: 100rpx;
    line-height: 100rpx;
    text-align: center;
    font-size: 32rpx;
    color: #333333;
  }

  .content {
    width: 100%;
    height: 500rpx;
    padding: 0 32rpx 32rpx 32rpx;
    box-sizing: border-box;
  }

  .foot {
    height: 80rpx;
    display: flex;
    line-height: 80rpx;
    text-align: center;
  }
}
</style>
