<template>
  <view class="page">
		<navbar leftClick @leftClick="$utils.navigateBack" />

    <view class="content">
      <image class="avatar" :src="detail.headImage"></image>
      <text class="nick-name">{{ detail.headTitle || '' }}</text>

      <template v-if="isLocked">
        <button class="btn" type="success" @click="onAdd">添加</button>
      </template>
      <template v-else>
        <image class="qr" :src="detail.wxCodeImage" :show-menu-by-longpress="true"></image>
      </template>
    </view>

    <popupUnlock ref="popupUnlock" src="../static/sharing/unlock-user.png"></popupUnlock>

  </view>
</template>

<script>
	import { mapState } from 'vuex'
  import popupUnlock from '../components/popupUnlock.vue'

	export default {
    components: {
      popupUnlock,
    },
		data() {
			return {
        id: null,
        detail: {
          id: null,
          userId: null,
          headImage: null,
          headTitle: null,
          indexImage: null,
          num: 0,
          wxCodeImage: null,
          textDetails: null,
        },
        isLocked: true,
      }
    },
		computed: {
			...mapState(['userInfo']),
		},
    onShow() {
      if (this.id && uni.getStorageSync('token')) {
        this.fetchDetails()
      }
    },
    onLoad(option) {
      const { id, state, shareId } = option

			if (shareId) {
				uni.setStorageSync('shareId', shareId)
			}
      
			if (state) {
				uni.setStorageSync('state', state)
			}
      
			if (id) {
				uni.setStorageSync('id', id)
			}

      this.id = id

      if (uni.getStorageSync('token')) {
        this.fetchDetails()
      } else {
        uni.navigateTo({
          url: '/pages_order/auth/wxLogin'
        })
      }
    },
    onShareAppMessage(res) {
      const {
        headTitle,
        indexImage,
      } = this.detail

      let o = {
        title : headTitle,
        imageUrl: indexImage,
        query: `id=${this.id}&state=0&shareId=${this.userInfo.id}`,
      }

      this.refreshLockStatus()

      return o
    },
    methods: {
      async fetchDetails() {
        try {
          this.detail = await this.$fetch('getShareInfo', { id: this.id })
        } catch (err) {
          
        }
      },
      async fetchCheckShare() {
        try {
          return await this.$fetch('checkShare', { id: this.id })
        } catch (err) {
          return {}
        }
      },
      async refreshLockStatus() {
        const result = await this.fetchCheckShare()
        const { title, open } = result

        if (open) {
          this.isLocked = false
          this.$refs.popupUnlock.close();
          return
        }

        title && uni.showToast({
          title,
          icon: 'none',
          duration: 3000
        })
      },
      openPopup() {
        this.$refs.popupUnlock.open();
      },
      async onAdd() {
        const result = await this.fetchCheckShare()
        const { open, need_num, num } = result

        if (open) { // 转发已达标
          this.isLocked = false
          return
        }

        uni.showToast({
          title: `还需转发${need_num - num}次`,
          icon: 'none',
        })

        this.openPopup()
      }
    },
  }
</script>

<style scoped lang="scss">
.page {
  position: relative;
  height: 100vh;
}

.content {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.avatar {
  width: 180rpx;
  height: 180rpx;
  margin-top: 127rpx;
}

.nick-name {
  color: #1B1B1B;
  font-size: 32rpx;
  margin-top: 30rpx;
}

.btn, .qr {
  position: absolute;
}

.btn {
  width: calc(100% - 60rpx*2);
  height: auto;
  left: 60rpx;
  bottom: 292rpx;

  background-color: #07C160;
  border: none;
  color: #FFFFFF;
  font-size: 28rpx;
  line-height: 1;
  border-radius: 45rpx;
  padding: 25rpx 0;
  box-sizing: border-box;
}

.qr {
  width: 350rpx;
  height: 350rpx;
  bottom: 269rpx;
}
</style>