/*
 * @Author: code4eat awesomedema@gmail.com
 * @Date: 2022-12-14 14:14:32
 * @LastEditors: code4eat awesomedema@gmail.com
 * @LastEditTime: 2025-04-30 14:52:04
 * @FilePath: /BudgetManaSystem/src/utils/format.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// 示例方法，没有实际意义
export function trim(str: string) {
  return str.trim();
}

// 定义金额格式化选项的接口
interface FormatMoneyOptions {
  decimalPlaces?: number; // 指定小数位数
  useThousandSeparator?: boolean; // 是否使用千分号
}

//金额数字转换
export function formatMoneyNumber(
  num: number | string | undefined | null,
  options?: FormatMoneyOptions,
) {
  if (num === undefined || num === null || num === '') {
    return '-'; // 对于空值或未定义值，返回 "-"
  }

  const numberToFormat = Number(num);
  if (isNaN(numberToFormat)) {
    return String(num); // 如果转换后不是有效数字，则返回原始字符串形式
  }

  // 默认小数位数为2，除非在选项中指定
  const minimumFractionDigits =
    options?.decimalPlaces !== undefined ? options.decimalPlaces : 2;
  const maximumFractionDigits =
    options?.decimalPlaces !== undefined ? options.decimalPlaces : 2;
  // 默认使用千分号，除非在选项中明确设置为 false
  const useGrouping = options?.useThousandSeparator === true;

  return new Intl.NumberFormat('en-US', {
    minimumFractionDigits: minimumFractionDigits,
    maximumFractionDigits: maximumFractionDigits,
    useGrouping: useGrouping, // 控制是否使用千分号
  }).format(numberToFormat);
}

export function formatToPercentage(num: number) {
  if (typeof num !== 'number' || isNaN(num)) {
    return num;
  }
  return new Intl.NumberFormat('en-US', {
    style: 'percent',
    minimumFractionDigits: 2,
    maximumFractionDigits: 2,
  }).format(num);
}
