<template>
  <view class="page__view">
		<navbar leftClick @leftClick="$utils.navigateBack" >
      <view class="flex">
        <view>待支付</view>
        <template v-if="time">
          <uv-count-down 
            :time="time" 
            format="mm:ss" 
            autoStart 
            millisecond 
            @change="onChange">
            <view class="flex countdown">
              <text>剩余</text>
              <text>{{ `${timeData.minutes}:${timeData.seconds}` }}</text>
            </view>
          </uv-count-down>
          <view>后关闭</view>
        </template>
      </view>
    </navbar>

    <view class="main">

      <productCard :data="productCardData"></productCard>

      <orderInfoView :data="detail"></orderInfoView>

      <view class="notice">
        <view class="notice-header">下单须知</view>
        <view class="notice-content">
          <!-- todo: check key -->
				  <uv-parse :content="configList['order_instructions']"></uv-parse>
        </view>
      </view>

    </view>
  
		<view class="bottom">
      <view class="agreement">
				<uv-checkbox-group
					v-model="checkboxValue"
					shape="circle"
				>
					<uv-checkbox
						size="40rpx"
						icon-size="40rpx"
						activeColor="#00A9FF"
						:name="1"
					></uv-checkbox>
				</uv-checkbox-group>
				<view class="desc">
          我已阅读并同意
					<!-- todo: 替换配置项key -->
					<text class="highlight" @click="$refs.modal.open('config_agreement', '退订政策')">《退订政策》</text>
					<!-- todo: 替换配置项key -->
					<text class="highlight" @click="$refs.modal.open('config_privacy', '合同范本')">《合同范本》</text>
					<!-- todo: 替换配置项key -->
					<text class="highlight" @click="$refs.modal.open('config_privacy', '预订须知')">《预订须知》</text>
					<!-- todo: 替换配置项key -->
					<text class="highlight" @click="$refs.modal.open('config_privacy', '安全提示')">《安全提示》</text>
				</view>
			</view>
      <view class="flex bar">
        <button plain class="flex flex-column btn btn-simple" open-type="contact">
          <image class="icon" src="@/pages_order/static/product/icon-service.png" mode="widthFix"></image>
          <view>联系客服</view>
        </button>
        <view class="col flex price">
          <view class="price-label">
            合计
          </view>
          <view class="price-unit">¥</view>
          <view class="price-value">
            {{ detail.payAmount }}
          </view>
        </view>
        <button class="col btn btn-primary" @click="onPay">立即支付</button>
      </view>
    </view>

		<agreementModal ref="modal" @confirm="onConfirmAgreement"></agreementModal>

  </view>
</template>

<script>
	import { mapState } from 'vuex'

  import productCard from '@/pages_order/order/components/productCard.vue'
  import orderInfoView from '@/pages_order/order/components/orderInfoView.vue'
	import agreementModal from '@/pages_order/components/agreementModal.vue'

  export default {
    components: {
      productCard,
      orderInfoView,
      agreementModal,
    },
    data() {
      return {
        id: null,
        detail: {},
        time: null,
        timeData: {},
        checkboxValue: [],
      }
    },
    computed: {
			...mapState(['configList', 'userInfo', 'orderInfo']),
      productCardData() {
        const { 
          activityId,
          activityTitle,  
          activityBrief,
          activityTag,
          startDate,
          endDate,
        } = this.detail

        return {
          time: 'time',
          product: {
            id: activityId,
            title: activityTitle,
            brief: activityBrief,
            tagDetails: activityTag,
            dateList: [
              {
                id: 'time',
                startDate,
                endDate,
              }
            ]
          }
        }
      },
    },
    async onLoad({ id }) {
      this.id = id

      await this.fetchOrderDetail()
      // todo
      // this.updateCountdown()
    },
    async onPullDownRefresh() {
      await this.fetchOrderDetail()
      uni.stopPullDownRefresh()
    },
    methods: {
      async fetchOrderDetail() {
        try {

          this.detail = await this.$fetch('queryOrderById', { orderId: this.id })
          console.log('orderInfo', this.detail)

        } catch (err) {

        }

        uni.stopPullDownRefresh()
      },
      onConfirmAgreement(confirm) {
        if (confirm) {
          this.checkboxValue = [1]
        } else {
          this.checkboxValue = []
        }
      },
      async onPay() {
        if(!this.checkboxValue.length){
          return uni.showToast({
            title: '请先同意《退订政策》《合同范本》《预订须知》《安全提示》',
            icon:'none'
          })
        }

        try {
     
          const result = await this.$fetch('payOrder', { orderId: this.id })
          
          await uni.requestPaymentWxPay({ result })
       
          uni.showToast({
            title: '支付成功',
            icon: 'none'
          })
          
          setTimeout(() => {
            // todo: check → jump to order list page ?
            uni.reLaunch({
              url: `/pages_order/order/orderList/index`
            });
          }, 700)
        } catch (err) {

        }
      },
      updateCountdown() {

        let current = dayjs()
        let startTime = dayjs(this.detail.createTime)

        if (startTime.isSameOrBefore(current)) {
          this.time = null
          return
        }

        this.time = startTime.diff(current, 'second')

      },
			onChange(e) {
				this.timeData = e
			},
    },
  }
</script>

<style scoped lang="scss">

  @import '../styles/style.scss';

  .bottom {
    .bar {
      .price {
        justify-content: flex-start;
        column-gap: 8rpx;
        
        &-label {
          font-size: 24rpx;
          color: #626262;
        }

        &-unit,
        &-value {
          font-weight: 500;
          color: #FF4800;
        }

        &-unit {
          font-size: 24rpx;
        }

        &-value {
          font-size: 40rpx;
        }
      }

      .btn-simple {
        flex: none;
        width: auto;
        font-family: PingFang SC;
        font-weight: 400;
        font-size: 22rpx;
        line-height: 1.1;
        color: #999999;
        border: none;
        border-radius: unset;

        .icon {
          width: 52rpx;
          height: auto;
          margin-bottom: 4rpx;
        }
      }
    }
  }
  
</style>