<template>
  <view>
    <view class="card">
      <view class="flex card-header" style="justify-content: space-between;">
        <view>订单详情</view>
        <view :class="['tag', `tag-${data.status}`]">
          {{ statusDesc }}
        </view>
      </view>
      <view class="flex member" v-for="item in members" :key="item.id">
        <view class="info">
          <view class="flex info-top">
            <view>{{ item.name }}</view>
            <view>{{ getTypeDesc(item.type) }}</view>
            <view class="light">{{ getTypeTips(item.type) }}</view>
          </view>
          <view class="info-bottom">{{ item.idNo }}</view>
        </view>
        <view class="flex price">¥<view class="highlight">{{ item.price }}</view></view>
      </view>
      <view class="row">
        <view class="row-label">总价格</view>
        <view class="row-content">
          <view class="flex total-price">
            <view>¥</view>
            <view class="highlight">{{ totalPrice }}</view>
            <view class="light" v-if="data.discount">
              {{ `优惠（${data.discount}）` }}
            </view>
          </view>
        </view>
      </view>
    </view>
    <view class="card">
      <view class="card-header">联系人信息</view>
      <view class="row">
        <view class="row-label">真实姓名</view>
        <view class="row-content">{{ data.name }}</view>
      </view>
      <view class="row">
        <view class="row-label">手机号码</view>
        <view class="row-content">{{ data.phone }}</view>
      </view>
    </view>
    <view class="card order">
      <view class="card-header">订单信息</view>
      <view class="row">
        <view class="row-label">订单编号</view>
        <view class="row-content">{{ data.orderNo }}</view>
      </view>
      <view class="row">
        <view class="row-label">下单时间</view>
        <view class="row-content">{{ data.createTime }}</view>
      </view>
    </view>
  </view>
</template>

<script>

  const ORDER_STATUS_AND_DESC_MAPPING = {
    0: '待支付',
    1: '已支付',
    2: '已完成',
  }
  const MEMBER_TYPE_AND_DESC_MAPPING = {
    0: '成人',
    1: '青少年',
    2: '儿童',
  }
  const MEMBER_TYPE_AND_TIPS_MAPPING = {
    0: '(18周岁以上)',
    1: '(14周岁以上)',
    2: '(14周岁以下)',
  }

  export default {
    props: {
      data: {
        type: Object,
        default() {
          return {}
        }
      },
    },
    computed: {
      statusDesc() {
        const { status } = this.data
        return ORDER_STATUS_AND_DESC_MAPPING[status]
      },
      productPackage() {
        const { time, product } = this.data
        const { timeOptions } = product || {}

        return timeOptions?.find?.(item => item.id === time) || {}
      },
			totalPrice() {
        const { adults, teenager, child } = this.data

        const { adultsPrice, teenagerPrice, childPrice } = this.productPackage

        let total = 0
        
        adults && (total += adults * (adultsPrice || 0))
        teenager && (total += teenager * (teenagerPrice || 0))
        child && (total += child * (childPrice || 0))

				return total
			},
      members() {
        const { members } = this.data
        const { adultsPrice, teenagerPrice, childPrice } = this.productPackage

        return members?.map?.(item => {
          const { type } = item

          let price = 0
          
          switch(type) {
            case 0: // 成年
              price =  adultsPrice
              break
            case 1: // 青少年
              price =  teenagerPrice
              break
            case 2: // 儿童
              price =  childPrice
              break
          }

          return { ...item, price }
        })
      },
    },
    methods: {
      getTypeDesc(type) {
        return MEMBER_TYPE_AND_DESC_MAPPING[type]
      },
      getTypeTips(type) {
        return MEMBER_TYPE_AND_TIPS_MAPPING[type]
      },
    },
  }
</script>

<style scoped lang="scss">

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

  .member {
    margin-top: 16rpx;
    justify-content: space-between;
    padding: 24rpx;
    background: #F9F9F9;
    border-radius: 24rpx;

    .info {
      &-top {
        justify-content: space-between;
        column-gap: 24rpx;
        font-size: 32rpx;
        color: #181818;

        .light {
          font-size: 24rpx;
          color: #8B8B8B;
        }
      }

      &-bottom {
        font-size: 28rpx;
        color: #9B9B9B;
      }
    }

    .price {
      column-gap: 4rpx;
      font-size: 24rpx;
      font-weight: 500;
      color: #FF4800;

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

  }

  .row {
    margin-top: 16rpx;
    display: flex;
    align-items: center;
    justify-content: space-between;

    &-label {
      font-size: 26rpx;
      color: #8B8B8B;
    }

    &-content {
      font-size: 28rpx;
      color: #393939;
    }
  }

  .order {
    .row {
      margin-top: 32rpx;
    }
  }

  .total-price {
    column-gap: 8rpx;
    font-size: 24rpx;
    font-weight: 500;
    color: #FF4800;

    .highlight {
      font-size: 32rpx;
    }

    .light {
      font-size: 22rpx;
      font-weight: 400;
    }
  }

</style>