<template>
  <view class="page__view">

		<navbar title="我的预约" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#F3F2F7" />

    <template v-if="detail">

      <view class="main">

        <view class="flex flex-column status">
          <template v-if="orderSuccess">
            <image class="icon" src="@/pages_order/static/checkup/icon-success.png" mode="widthFix"></image>
          </template>
          <template v-else>
            <image class="icon" src="@/pages_order/static/checkup/icon-error.png" mode="widthFix"></image>
          </template>
          <view>{{ statusDesc }}</view>
        </view>

        <!-- 自采 -->
        <template v-if="detail.type == 1">
          <view class="card">
            <view class="card-header">自采检测预约信息</view>
            <view class="flex row">
              <view class="row-label">姓名</view>
              <view class="row-content">{{ detail.userName }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">寄送地址</view>
              <view class="row-content">{{ detail.addressDesc }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">电话</view>
              <view class="row-content">{{ detail.phone }}</view>
            </view>
          </view>
        </template>
        <!-- 上门 -->
        <template v-else-if="detail.type == 2">
          <view class="card">
            <view class="card-header">上门检测预约信息</view>
            <view class="flex row">
              <view class="row-label">姓名</view>
              <view class="row-content">{{ detail.userName }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">体检地址</view>
              <view class="row-content">{{ detail.addressDesc }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">时间</view>
              <view class="row-content highlight">{{ detail.timeDesc }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">电话</view>
              <view class="row-content">{{ detail.phone }}</view>
            </view>
          </view>
        </template>
        <!-- 到店 -->
        <template v-else-if="detail.type == 3">
          <view class="card">
            <view class="card-header">到店检测预约信息</view>
            <view class="flex row">
              <view class="row-label">姓名</view>
              <view class="row-content">{{ detail.userName }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">时间</view>
              <view class="row-content highlight">{{ detail.timeDesc }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">电话</view>
              <view class="row-content">{{ detail.phone }}</view>
            </view>
            <view class="flex row">
              <view class="row-label">医院</view>
              <view class="row-content">{{ detail.hospitalDesc }}</view>
            </view>
          </view>
        </template>

      </view>
  
      <view class="flex bottom">
        <!-- 自采 -->
        <template v-if="detail.status == 1">
          <button class="btn btn-plain" open-type="contact">客服</button>
          <button class="btn" @click="openTrackingNoPopup">已回寄</button>
        </template>
        <!-- 上门, 到店, 预约失败 -->
        <template v-else-if="[2, 3, 6].includes(detail.status)">
          <button class="btn btn-plain" @click="onCancel">取消</button>
          <button class="btn" @click="onEdit">修改</button>
        </template>
        <!-- 已完成 -->
        <template v-else-if="detail.status == 4">
          <button class="btn" @click="jumpToReportDetail">报告查看</button>
        </template>
      </view>
    </template>

    <checkupServicePopup ref="checkupServicePopup"></checkupServicePopup>
    <checkupTrackingNoPopup ref="checkupTrackingNoPopup" @submitted="getData"></checkupTrackingNoPopup>
  </view>
</template>

<script>
  import checkupServicePopup from '@/pages_order/checkup/checkupServicePopup.vue'
  import checkupTrackingNoPopup from '@/pages_order/checkup/checkupTrackingNoPopup.vue'

  export default {
    components: {
      checkupServicePopup,
      checkupTrackingNoPopup,
    },
    data() {
      return {
        id: null,
        detail: null,
        hospitalOptions: [
          { id: '001', label: '湖南省长沙市湘雅第一医院' },
          { id: '002', label: '湖南省长沙市湘雅第二医院' },
          { id: '003', label: '湖南省长沙市湘雅第三医院' },
          { id: '004', label: '湖南省长沙市湘雅第四医院' },
        ]
      }
    },
    onLoad(arg) {
      this.id = arg.id

      this.getData()
    },
    computed: {
      orderSuccess() {
        // todo: check status
        return this.detail?.status < 5
      },
      statusDesc() {
        const status = this.detail?.status

        if (status < 4) {
          return '预约成功'
        }

        if (status == 4) {
          return '已完成'
        }

        if (status == 6) {
          return '预约失败'
        }

        return ''
      },
    },
    methods: {
      getData() {
        // todo: fetch by id

        let detail = {
          id: '003',
          url: '',
          title: '孕产妇体检套餐',
          userName: '周小艺',
          phone: '15558661691',
          amount: 688,
          area: ['海南省', '海口市', '秀英区'],
          address: '秀英街道5单元183室',
          hospital: '001',
          createTime: '2025-04-28 08:14',
          appointmentDate: '2025-04-28',
          appointmentTime: ['08:00', '09:00'],
          type: 2,
          status: 4,
        }

        detail.addressDesc = this.getAddressDesc(detail)
        detail.timeDesc = this.getTimeDesc(detail)
        detail.hospitalDesc = this.getHospitalDesc(detail)

        this.detail = detail

        if ([2, 3].includes(this.detail.status)) {
          this.$refs.checkupServicePopup.open()
        }
      },
      getAddressDesc(data) {
        if (!data) {
          return ''
        }
        console.log('detail', data)
        const { area, address } = data
        console.log('area', area, 'address', address)

        return `${(area || []).join('')}${address}`
      },
      getTimeDesc(data) {
        if (!data) {
          return ''
        }
        const { appointmentDate, appointmentTime } = data

        return `${appointmentDate} ${(appointmentTime || []).join('～')}`
      },
      getHospitalDesc(data) {
        const { hospital } = data

        return this.hospitalOptions.find(item => item.id == hospital)?.label
      },
      openTrackingNoPopup() {
        this.$refs.checkupTrackingNoPopup.open(this.id)
      },
      onEdit() {
        this.$utils.navigateTo(`/pages_order/checkup/checkupBook/apply?id=${this.detail.id}&type=${this.detail.type}`)
      },
      onCancel() {
        // todo: fetch

        uni.showToast({
          title: '取消成功',
        });

        setTimeout(() => {
          this.$utils.navigateBack()
        }, 800)
      },
      jumpToReportDetail() {
        this.$utils.navigateTo(`/pages_order/checkup/checkupReport/index?id=${this.detail.id}`)
      },
    },
  }
</script>

<style scoped lang="scss">
  @import './style.scss';

  .status {
    margin-bottom: 40rpx;
    row-gap: 4rpx;
    width: 100%;
    padding: 24rpx 0;
    box-sizing: border-box;
    font-family: PingFang SC;
    font-weight: 400;
    font-size: 28rpx;
    line-height: 1.4;
    color: #252545;
    background: #FFFFFF;
    border-radius: 24rpx;

    .icon {
      width: 84rpx;
      height: auto;
    }
  }

  .row {
    &-content {
      text-align: right;
      font-size: 28rpx;
      color: #393939;

      &.highlight {
        font-weight: 500;
        color: #7451DE;
      }
    }
  }

  .bottom {
    align-items: flex-start;
    column-gap: 32rpx;

    .btn {
      flex: 1;

      &-plain {
        padding: 14rpx 0;
        color: #252545;
        background: transparent;
        border: 2rpx solid #252545;
      }
    }
  }
</style>