<template>
  <view class="card" @click="jumpToProductDetail">
    <view class="flex top">
      <view class="title">{{ data.title }}</view>
      <view :class="['flex', 'status', `status-${flag}`]">{{ flagDesc }}</view>
    </view>
    <view class="flex main">
      <image class="img" :src="coverImg" mode="scaleToFill"></image>
      <view class="info">
        <view class="flex row">
          <view class="row-label">客户姓名：</view>
          <view class="row-content">{{ data.name }}</view>
        </view>
        <template v-if="data.status == 0">
          <view class="flex row">
            <view class="row-label">下单时间：</view>
            <!-- todo: check key -->
            <view class="row-content">{{ data.createTime }}</view>
          </view>
        </template>
        <template v-else>
          <view class="flex row">
            <view class="row-label">检测类型：</view>
            <view class="row-content">{{ subscribeTypeDesc }}</view>
          </view>
          <view class="flex row">
            <view class="row-label">预约时间：</view>
            <view class="row-content">{{ timeDesc }}</view>
          </view>
        </template>
        <view class="flex row">
          <view class="row-label">联系电话：</view>
          <view class="row-content">{{ data.phone }}</view>
        </view>
      </view>
    </view>
    <view class="flex bottom">
      <view class="flex price">
        <text class="price-label">总价格：</text>
        <text class="price-unit">¥</text><text class="price-value">{{ data.price }}</text>
      </view>
      <view class="flex btns">
        <!-- 待预约 -->
        <template v-if="data.status == '0'">
          <button class="btn" @click.stop="onBook">检测预约</button>
        </template>
        <!-- 待检测 -->
        <template v-else-if="data.status == '1'">
          <!-- 自采 -->
          <template v-if="data.subscribeType == '0'">
            <button class="btn" @click.stop="onSendBackOnline">线上回寄试剂盒</button>
          </template>
        </template>
      </view>
    </view>
  </view>
</template>

<script>
  // 状态 0待预约 1待检测 2已完成 3已取消
  const STATUS_AND_DESC_MAPPING = {
    0: '待预约',
    1: '待检测',
    2: '已完成',
    3: '已取消',
    // todo: check 预约失败

    // 0: '待预约',
    // 1: '自采',
    // 2: '上门',
    // 3: '到店',
    // 4: '已完成',
    // 5: '已取消',
    // 6: '预约失败',
  }

  const FLAG_AND_DESC_MAPPING = {
    0: '待预约',
    1: '自采',
    2: '上门',
    3: '到店',
    4: '已完成',
    5: '已取消',
    6: '预约失败',
  }

  // 可选预约类型 0自采，1上门，2到店，3已取消
  const SUBSCRIBE_TYPE_AND_DESC_MAPPING = {
    0: '自采',
    1: '上门',
    2: '到店',
    3: '已取消',
  }

  export default {
    props: {
      data: {
        type: Object,
        default() {
          return {}
        }
      }
    },
    computed: {
      coverImg() {
        const { orderProduct } = this.data || {}
        const { image } = orderProduct || {}

        return image?.split?.(',')?.[0]
      },
      subscribeTypeDesc() {
        const { subscribeType } = this.data

        return SUBSCRIBE_TYPE_AND_DESC_MAPPING[subscribeType]
      },
      flag() {
        const { status, subscribeType } = this.data
        
        // 0: '待预约',
        // 1: '自采',
        // 2: '上门',
        // 3: '到店',
        // 4: '已完成',
        // 5: '已取消',
        // todo: check 预约失败
        // 6: '预约失败',

        // status 状态 0待预约 1待检测 2已完成 3已取消
        if (status == '0') { // 待预约
          return 0 // 待预约
        }
        if (status == '1') { // 待检测
          // subscribeType 可选预约类型 0自采，1上门，2到店，3已取消
          if (subscribeType == '0') {
            return 1 // 自采
          } else if (subscribeType == '1') {
            return 2 // 上门
          } else if (subscribeType == '2') {
            return 3 // 到店
          }
          return
        }
        if (status == '2') { // 已完成
          return 4 // 已完成
        }
        if (status == '3') { // 已取消
          return 5 // 已取消
        }
      },
      flagDesc() {
        return FLAG_AND_DESC_MAPPING[this.flag]
      },
      timeDesc() {
        const { subscribeDate, subscribeTime } = this.data || {}

        if (!subscribeTime) {
          return '--'
        }

        const timeRange = JSON.parse(subscribeTime).join('～')
        
        return `${subscribeDate} ${timeRange}`
      },
    },
    methods: {
      onBook() {
        this.$utils.navigateTo(`/pages_order/checkup/checkupBook/apply?id=${this.data.id}&type=${this.data.type}`)
      },
      onSendBackOnline() {
        this.$emit('sendBack')
      },
      jumpToProductDetail() {
        console.log(this.data.id, 'jumpToProductDetail')
        // this.$utils.navigateTo(`/pages_order/checkup/checkupBook/detail?id=${this.data.id}`)

          // todo: check
        if (this.data.status == '0') { // 0-待预约
          // this.$utils.navigateTo(`/pages_order/order/orderDetail/index?id=${this.data.id}`)
        } else {
          this.$utils.navigateTo(`/pages_order/checkup/checkupBook/detail?id=${this.data.id}`)
        }
      },
    },
  }
</script>

<style scoped lang="scss">
  .card {
    width: 100%;
    padding: 32rpx;
    box-sizing: border-box;
    background: #FAFAFF;
    border: 2rpx solid #FFFFFF;
    border-radius: 32rpx;
  }

  .top {
    justify-content: space-between;
    
    .title {
      font-family: PingFang SC;
      font-weight: 500;
      font-size: 36rpx;
      line-height: 1.4;
      color: #252545;
    }

    .status {
      display: inline-flex;
      min-width: 120rpx;
      padding: 6rpx 0;
      box-sizing: border-box;
      font-family: PingFang SC;
      font-weight: 400;
      font-size: 24rpx;
      line-height: 1.4;
      color: #252545;
      background: #F3F3F3;
      border-radius: 12rpx;

      &-0 {
        color: #7D27E0;
        background: #F5EEFD;
      }

      &-1 {
        color: #2799E0;
        background: #EEF7FD;
      }

      &-2 {
        color: #E53C29;
        background: #FDE7E5;
      }

      &-3 {
        color: #10A934;
        background: #E2FDE9;
      }
    }
  }

  .main {
    margin: 24rpx 0;
    column-gap: 24rpx;

    .img {
      flex: none;
      width: 120rpx;
      height: 120rpx;
    }

    .info {
      flex: 1;
      padding: 24rpx;
      background: #FFFFFF;
      border-radius: 32rpx;
    }

    .row {
      align-items: flex-start;
      justify-content: flex-start;
      column-gap: 4rpx;

      font-family: PingFang SC;
      font-weight: 400;
      font-size: 28rpx;
      line-height: 1.4;

      &-label {
        flex: none;
        color: #8B8B8B;
      }

      &-content {
        color: #393939;
      }
    }

    .row + .row {
      margin-top: 16rpx;
    }
  }

  .bottom {
    justify-content: space-between;

    .price {
      column-gap: 8rpx;
      font-family: PingFang SC;
      font-weight: 500;
      line-height: 1.4;

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

      &-unit {
        font-size: 24rpx;
        color: #7451DE;
      }

      &-value {
        font-size: 32rpx;
        color: #7451DE;
      }
    }

    .btns {
      flex: 1;
      justify-content: flex-end;
      column-gap: 16rpx;
    }

    .btn {
      padding: 10rpx 22rpx;
      font-family: PingFang SC;
      font-weight: 400;
      font-size: 28rpx;
      line-height: 1.4;
      color: #393939;
      border: 2rpx solid #252545;
      border-radius: 32rpx;
    }
  }
</style>