<script lang="ts" setup>
/**
 * 诊所设置「基础资料」会员卡片
 * 大尺寸等级徽标 + 期限丝带叠加，展示等级名与到期时间
 */
import { computed } from 'vue';

import VipBadgeCombo from './VipBadgeCombo.vue';

const props = defineProps<{
  vip?: Record<string, any> | null;
}>();

const hasVipVisual = computed(() => {
  const v = props.vip;
  return !!(v && (v.badge_url || v.duration_badge_url));
});

const expireText = computed(() => {
  const v = props.vip;
  if (!v) return '默认会员';
  if (v.is_lifetime) return '永久有效';
  const expireAt = Number(v.expire_at || 0);
  if (!expireAt) {
    if ((v.level_code || 'V0') === 'V0') return '默认会员';
    return '永久有效';
  }
  if (typeof v.expire_at === 'string' && String(v.expire_at).includes('-')) {
    return `有效期至 ${v.expire_at}`;
  }
  const d = new Date(expireAt * 1000);
  const pad = (n: number) => String(n).padStart(2, '0');
  return `有效期至 ${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
});
</script>
<template>
  <div class="store-vip-card">
    <VipBadgeCombo
      v-if="hasVipVisual"
      size="xl"
      :badge-url="vip?.badge_url"
      :duration-badge-url="vip?.duration_badge_url"
      :level-name="vip?.level_name"
      :duration-label="vip?.duration_label"
    />
    <div v-else class="store-vip-card__placeholder">V</div>
    <div class="store-vip-card__info">
      <div class="store-vip-card__title">
        {{ vip?.level_name || '普通会员' }}
      </div>
      <div class="store-vip-card__sub">
        {{ vip?.duration_label || '普通会员' }}
      </div>
      <div class="store-vip-card__expire">{{ expireText }}</div>
    </div>
  </div>
</template>
<style scoped>
.store-vip-card {
  display: flex;
  align-items: center;
  gap: 24px;
  padding: 20px 28px;
  border-radius: 16px;
  background: linear-gradient(135deg, #2c3e50 0%, #3d5a40 50%, #6acdbb 100%);
  box-shadow: 0 8px 24px rgba(44, 62, 80, 0.16);
  margin-bottom: 24px;
}
.store-vip-card__placeholder {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.18);
  color: #fff;
  font-size: 48px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.store-vip-card__info {
  min-width: 0;
  color: #fff;
}
.store-vip-card__title {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.3;
  margin-bottom: 6px;
}
.store-vip-card__sub {
  font-size: 14px;
  opacity: 0.9;
  margin-bottom: 6px;
}
.store-vip-card__expire {
  font-size: 13px;
  opacity: 0.78;
}
html.dark .store-vip-card,
.dark .store-vip-card {
  background: linear-gradient(135deg, #1a2332 0%, #243528 50%, #2d6b5f 100%);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
}
</style>
