/**
 * 金额单位转换：元 -> 万元
 * @param val 原始金额（元）
 * @param digit 保留小数位数，默认为 2
 * @returns 转换后的字符串（万元）
 */
export const formatAmount = (val: any, digit: number = 2) => {
  if (val === undefined || val === null || val === '') return '0.00';
  const num = Number(val);
  if (isNaN(num)) return '0.00';
  return (num / 10000).toFixed(digit);
};

/**
 * 金额千分位格式化
 * @param val 原始金额
 * @param digit 保留小数位数
 * @returns 格式化后的字符串 (如: 1,234.56)
 */
export const formatWithComma = (val: any, digit: number = 2) => {
  if (val === undefined || val === null || val === '') return '0.00';
  const num = Number(val);
  if (isNaN(num)) return '0.00';
  
  const options = {
    minimumFractionDigits: digit,
    maximumFractionDigits: digit,
  };
  return num.toLocaleString('en-US', options);
};

/**
 * 限制输入正数且最多两位小数的格式化工具
 * 常用于 uv-input 的 formatter 属性
 * @param val 输入字符串
 * @returns 格式化后的字符串
 */
export const amountInputFormatter = (val: string) => {
  if (!val) return '';
  // 1. 仅保留数字和小数点
  let formatted = val.replace(/[^\d.]/g, '');
  // 2. 保证只有一个小数点
  const dotIndex = formatted.indexOf('.');
  if (dotIndex !== -1) {
    const mainPart = formatted.substring(0, dotIndex);
    let decimalPart = formatted.substring(dotIndex + 1).replace(/\./g, ''); // 移除多余小数点
    // 3. 限制两位小数
    if (decimalPart.length > 2) {
      decimalPart = decimalPart.substring(0, 2);
    }
    formatted = `${mainPart}.${decimalPart}`;
  }
  return formatted;
};

