<template>
  <view class="user-info mb12" v-if="hasConsumerData">
    <view class="user-info-title">{{ infoTitle }}</view>
    <view
      v-for="(item, index) in consumerList"
      :key="getConsumerKey(item, index)"
      class="user-info-group"
    >
      <view class="user-info-item">
        <text class="label">{{ contactLabel }}</text>
        <text class="value">{{ item.visitorName || "未填写" }}</text>
      </view>
      <view class="user-info-item">
        <text class="label">联系电话：</text>
        <text class="value">{{ formatPhone(item.contactPhone) }}</text>
      </view>
    </view>
  </view>
</template>

<script setup>
import { defineProps, computed } from "vue";

// 订单类型常量
const ORDER_TYPES = {
  HOTEL: "0", // 酒店订单
  TICKET: "1", // 门票订单
  DINING: "2", // 餐饮订单
};

// 信息配置映射
const INFO_CONFIG = {
  [ORDER_TYPES.HOTEL]: {
    title: "订房信息",
    contactLabel: "联系房客：",
  },
  default: {
    title: "游客信息",
    contactLabel: "联系游客：",
  },
};

const props = defineProps({
  orderData: {
    type: Object,
    required: true,
    default: () => ({
      createTime: "",
      consumerInfoList: [],
      orderStatus: "0", // 订单状态 0-待支付 1-待确认 2-待使用 3-已取消 4-退款中 5-已关闭 6-已完成
      orderType: "0", // 0-酒店订单, 1-门票订单, 2-餐饮
    }),
  },
});

// 使用计算属性缓存信息标题
const infoTitle = computed(() => {
  const config = INFO_CONFIG[props.orderData.orderType] || INFO_CONFIG.default;
  return config.title;
});

// 使用计算属性缓存联系人标签
const contactLabel = computed(() => {
  const config = INFO_CONFIG[props.orderData.orderType] || INFO_CONFIG.default;
  return config.contactLabel;
});

// 使用计算属性处理用户信息列表，提供更好的响应性和缓存
const consumerList = computed(() => {
  return props.orderData.consumerInfoList || [];
});

// 检查是否有用户数据
const hasConsumerData = computed(() => {
  return consumerList.value.length > 0;
});

// 生成更稳定的key值，优先使用唯一标识
const getConsumerKey = (item, index) => {
  return item.id || item.visitorName || `consumer-${index}`;
};

// 格式化电话号码显示
const formatPhone = (phone) => {
  if (!phone) return "未填写";
  // 简单的电话号码格式化，中间部分用*号隐藏
  if (phone.length === 11) {
    return phone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
  }
  return phone;
};
</script>

<style scoped>
@import "./styles/index.scss";
</style>
