<template>
  <view class="page__view">

    <view class="main">
		  <navbar title="活动详情" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="transparent" />

      <view class="swiper">
        <uv-swiper 
          :list="bannerList" 
          keyName="image"
          indicator 
          indicatorMode="dot"
          indicatorInactiveColor="rgba(255, 255, 255, 0.7)" 
          height="680rpx" 
        ></uv-swiper>
      </view>

      <view class="summary">
        <view class="card info">
          <view class="card-header">{{ detail.title }}</view>
          <view class="card-content">
            <view class="desc">{{ detail.brief }}</view>
            <view class="flex tags" v-if="tagList.length">
              <view class="tag" v-for="(tag, tIdx) in tagList" :key="tIdx">
                {{ tag }}
              </view>
            </view>
            <view class="flex data">
              <view class="flex price">
                <view class="price-val">
                  <text>¥</text>
                  <text class="highlight">{{ priceInt }}</text>
                  <text>{{ `${priceFrac}起` }}</text>
                </view>
                <view class="price-bef" v-if="detail.priceOrigin">¥<text>{{ detail.priceOrigin }}</text></view>
              </view>
              <view class="registered" v-if="detail.applyNum">
                {{ `${detail.applyNum}人已报名` }}
              </view>
            </view>
          </view>
        </view>

        <view class="card">
          <view class="card-header">选择团期</view>
          <view class="card-content">
            <timeOptionsSelect v-model="selectTime" :options="detail.dateList"></timeOptionsSelect>
          </view>
        </view>

        <view class="card comment">
          <view class="flex card-header">
            <view>评论</view>
            <button class="flex btn" @click="jumpToCommentRecords">
              <view>查看全部</view>
              <image class="img" src="@/static/image/icon-arrow-right.png" mode="widthFix"></image>
            </button>
          </view>
          <view class="card-content">
            <commentList :list="commentList"></commentList>
          </view>
        </view>
      </view>
      
      <!-- <uv-sticky bgColor="#F3F3F3"> -->
        <view class="tabs">
          <uv-tabs 
            :list="tabs" 
            :scrollable="false" 
            lineColor="#00A9FF"
            lineWidth="48rpx"
            lineHeight="4rpx"
            :activeStyle="{
              'font-family': 'PingFang SC',
              'font-weight': 500,
              'font-size': '32rpx',
              'line-height': 1.4,
              'color': '#00A9FF',
            }" 
            :inactiveStyle="{
              'font-family': 'PingFang SC',
              'font-weight': 400,
              'font-size': '32rpx',
              'line-height': 1.4,
              'color': '#191919',
            }" 
            @click="clickTabs"
          ></uv-tabs>
        </view>
      <!-- </uv-sticky> -->
      <view class="detail" v-if="displayContent">
  			<uv-parse :content="displayContent"></uv-parse>
      </view>

    </view>

		<view class="flex bottom">
      <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="flex operate">
        <button class="flex btn btn-palin" @click="onCollect">收藏</button>
        <button class="flex btn btn-primary" @click="onBuy">立即购买</button>
      </view>
    </view>

    <orderInfoPopup ref="orderInfoPopup" :data="detail" @timeChange="selectTime = $event"></orderInfoPopup>

  </view>
</template>

<script>
  import timeOptionsSelect from '@/pages_order/order/orderConfirm/timeOptionsSelect.vue'
  import commentList from './commentList.vue'
  import orderInfoPopup from '@/pages_order/order/orderConfirm/infoPopup.vue'

  export default {
    components: {
      timeOptionsSelect,
      commentList,
      orderInfoPopup,
    },
    data() {
      return {
        id: null,
        detail: {},
        next: 'createOrder', // createOrder | addCart
        commentList: [],
        tabs: [
          { name: '行程亮点' },
          { name: '课程目标' },
          { name: '详细行程' },
        ],
        current: 0,
        selectTime: null,
      }
    },
    computed: {
			bannerList() {
				const { image } = this.detail

				if (!image) {
					return []
				}

				return Array.isArray(image) ? image : image.split(',')
			},
      tagList() {
        // todo: check key
        const { tagDetails } = this.detail || {}

        return tagDetails?.length ? tagDetails.split('、') : []
      },
      priceInt() {
        return Math.floor(this.detail.priceDiscount)
      },
      priceFrac() {
        let frac = this.detail.priceDiscount % this.priceInt
        return frac > 0 ? frac.toFixed(2).slice(1) : ''
      },
      displayContent() {
        const {
          special,
          target,
          process,
        } = this.detail

        if (this.current == 0) {
          return special
        } else if (this.current == 1) {
          return target
        } else if (this.current == 2) {
          return process
        }

        return ''
      }
    },
    onLoad(arg) {
      const { id } = arg

      this.id = id

      this.fetchDetail(id)
      this.fetchComment(id)
    },
    methods: {
      async fetchDetail(activityId) {

        try {
          const result = await this.$fetch('queryActivityById', { activityId })

          // todo: init options
          this.detail = result
        } catch (err) {

        }
 
      },
      async fetchComment(activityId) {
        try {
          const queryParams = {
            pageNo: 1,
            pageSize: 2,
            activityId,
          }
          this.commentList = (await this.$fetch('queryCommentList', queryParams))?.records
          console.log('commentList', this.commentList)
        } catch (err) {
          console.log('fetchComment', err)
        }

      },
      onCollect() {
				this.$store.dispatch('collect', this.id)

        // todo: set collectd and change btn to cancel collect?
      },
      onBuy() {
        this.$refs.orderInfoPopup.open({ selectTime: this.selectTime })
      },
      jumpToCommentRecords() {
        this.$utils.navigateTo(`/pages_order/comment/commentRecordsOfProduct?id=${this.id}`)
      },
			//点击tab栏
			clickTabs({ index }) {
        this.current = index
			},
    },
  }
</script>

<style scoped lang="scss">
  .page__view {
    width: 100vw;
    min-height: 100vh;
	  background: linear-gradient(#DAF3FF, #F3F3F3 500rpx, #F3F3F3);
    position: relative;
  }

  .main {
    width: 100vw;
    // padding: calc(var(--status-bar-height) + 120rpx) 0 198rpx 0;
    padding-bottom: 198rpx;
    box-sizing: border-box;
	}

  .swiper {
    /deep/ .uv-swiper-indicator__wrapper__dot,
    /deep/ .uv-swiper-indicator__wrapper__dot--active {
      width: 30rpx;
    }

    /deep/ .uv-swiper-indicator__wrapper__dot--active {
      background: linear-gradient(to right, #21FEEC, #019AF9);
    }
  }

  .summary {
    width: 100%;
    padding: 40rpx 32rpx;
    box-sizing: border-box;
  }

  .card {
    width: 100%;
    padding: 32rpx;
    box-sizing: border-box;
    background: #FFFFFF;
    border-radius: 24rpx;

    & + & {
      margin-top: 40rpx;
    }

    &-header {
      font-family: PingFang SC;
      font-weight: 500;
      font-size: 32rpx;
      line-height: 1.4;
      color: #181818;
    }

    &-content {
      margin-top: 16rpx;
    }

    &.info {

      .desc {
        font-size: 26rpx;
        white-space: pre-wrap;
        color: #8B8B8B;
      }

      .tags {
        margin-top: 16rpx;
        justify-content: flex-start;
        flex-wrap: wrap;
        gap: 16rpx;

        .tag {
          padding: 2rpx 14rpx;
          font-family: PingFang SC;
          font-weight: 400;
          font-size: 24rpx;
          line-height: 1.4;
          color: #00A9FF;
          background: #E9F8FF;
          border: 2rpx solid #00A9FF;
          border-radius: 8rpx;
        }
      }

      .data {
        margin-top: 16rpx;
        justify-content: space-between;
      }

      .price {
        justify-content: flex-start;
        align-items: baseline;
        column-gap: 6rpx;

        &-val {
          font-size: 24rpx;
          font-weight: 500;
          color: #FF4800;

          .highlight {
            font-size: 48rpx;
          }
        }

        &-bef {
          text-decoration: line-through;
          font-size: 24rpx;
          color: #8B8B8B;
        }
      }

      .registered {
        padding: 2rpx 10rpx;
        font-weight: 500;
        font-size: 30rpx;
        color: #FF4800;
        border: 2rpx solid #FF4800;
        border-radius: 4rpx;
      }

    }

    &.comment {

      .card-header {
        justify-content: space-between;
      }

			.btn {
				column-gap: 4rpx;
				font-size: 24rpx;
				color: #8B8B8B;

				.img {
					width: 32rpx;
					height: auto;
				}
			}
    }

  }

  .detail {
    // font-size: 0;
  }

	.bottom {
		position: fixed;
		left: 0;
		bottom: 0;
    z-index: 999;
    justify-content: space-between;
    column-gap: 16rpx;
		width: 100vw;
		// height: 198rpx;
		padding: 24rpx 40rpx 0 40rpx;
		padding-bottom: calc(env(safe-area-inset-bottom) + 24rpx);
		background: #FFFFFF;
		box-sizing: border-box;

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

      .icon {
        width: 52rpx;
        height: auto;
        margin-bottom: 4rpx;
      }
    }

    .operate {
      justify-content: flex-end;
      column-gap: 16rpx;
      
      .btn {
        font-size: 36rpx;
        font-weight: 500;
        border-radius: 41rpx;
        line-height: 1.4;

        &-palin {
          padding: 14rpx 46rpx;
          color: #252545;
          border: 2rpx solid #252545;
        }

        &-primary {
          padding: 14rpx 62rpx;
          color: #FFFFFF;
          background: linear-gradient(to right, #21FEEC, #019AF9);
          border: 2rpx solid #00A9FF;
        }
      }

    }
	}

</style>