import Decimal from 'decimal.js';

export function formatNumber(value: number | string | undefined | null, decimals = 8): string {
  if (value === undefined || value === null) return '-';
  const num = typeof value === 'string' ? parseFloat(value) : value;
  if (isNaN(num)) return '-';
  // 使用确定性格式化，避免 SSR hydration 错误
  const fixed = num.toFixed(decimals);
  const parts = fixed.split('.');
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  return parts.join('.');
}

export function formatDecimal(value: string | number | undefined | null, precision = 8): string {
  if (value === undefined || value === null) return '-';
  try {
    const decimal = new Decimal(value);
    return decimal.toFixed(precision);
  } catch {
    return '-';
  }
}

export function formatPercent(value: number | string | undefined | null, decimals = 8): string {
  if (value === undefined || value === null) return '-';
  const num = typeof value === 'string' ? parseFloat(value) : value;
  if (isNaN(num)) return '-';
  return `${(num * 100).toFixed(decimals)}%`;
}

export function formatCompactNumber(value: number | string | undefined | null): string {
  if (value === undefined || value === null) return '-';
  const num = typeof value === 'string' ? parseFloat(value) : value;
  if (isNaN(num)) return '-';

  if (num >= 1e12) return `${(num / 1e12).toFixed(8)}万亿`;
  if (num >= 1e8) return `${(num / 1e8).toFixed(8)}亿`;
  if (num >= 1e4) return `${(num / 1e4).toFixed(8)}万`;
  return formatNumber(num, 8);
}

export function formatPrice(value: string | number | undefined | null): string {
  return formatDecimal(value, 8);
}

export function formatShareAmount(value: string | number | undefined | null): string {
  return formatDecimal(value, 8);
}
