/**
 * 金额 / 计数 / 百分比格式化工具
 * 规范：docs/miniprogram-dev/design-system/DISPLAY-STANDARDS.md
 */

/**
 * 金额格式化
 * ¥12,680 / -¥368 / ¥0 / --
 * @param value 金额（元，整数）
 */
export function formatMoney(value: number | null | undefined): string {
  if (value === null || value === undefined) return '--'
  if (value === 0) return '¥0'
  const abs = Math.round(Math.abs(value))
  const formatted = abs.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
  return value < 0 ? `-¥${formatted}` : `¥${formatted}`
}

/**
 * 计数格式化（带单位）
 * 零值返回 '--'；≥1000 加千分位
 * @param value 数值
 * @param unit  单位字符串，如 '笔' '次' '人'
 */
export function formatCount(
  value: number | null | undefined,
  unit: string,
): string {
  if (value === null || value === undefined || value === 0) return '--'
  const n =
    value >= 1000
      ? value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
      : String(value)
  return `${n}${unit}`
}

/**
 * 纯数字千分位格式化（无单位，用于非金额大数字）
 * 零值返回 '--'
 */
export function formatNumber(value: number | null | undefined): string {
  if (value === null || value === undefined || value === 0) return '--'
  return value >= 1000
    ? value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
    : String(value)
}

/**
 * 百分比展示（允许超过100%）
 * 保留1位小数；零值返回 '0%'；空值返回 '--'
 */
export function formatPercent(value: number | null | undefined): string {
  if (value === null || value === undefined) return '--'
  if (value === 0) return '0%'
  return `${value.toFixed(1)}%`
}

/**
 * 进度条 CSS 宽度字符串（截断至 [0, 100]，防止溢出）
 * 用法：style="width: {{toProgressWidth(perfData.filledPct)}}"
 */
export function toProgressWidth(value: number | null | undefined): string {
  if (value === null || value === undefined) return '0%'
  return `${Math.min(100, Math.max(0, value)).toFixed(1)}%`
}
