/**
 * 统一金额处理工具函数
 * 后端存储：int64（分）
 * 前端展示：角精度（0.1元）
 */

/**
 * 将金额四舍五入到角精度（0.1元）
 * @example roundMoney(12.34) -> 12.3
 * @example roundMoney(12.36) -> 12.4
 */
export function roundMoney(value: number): number {
  return Math.round(Number(value || 0) * 10) / 10
}

/**
 * 格式化金额为字符串（保留1位小数）
 * @example formatMoney(12.3) -> "12.3"
 * @example formatMoney(12.0) -> "12.0"
 */
export function formatMoney(value: number | undefined | null): string {
  const num = Number(value || 0)
  return roundMoney(num).toFixed(1)
}

/**
 * 格式化金额并添加货币符号
 * @example formatMoneyWithSymbol(12.3) -> "¥12.3"
 */
export function formatMoneyWithSymbol(value: number | undefined | null): string {
  return `¥${formatMoney(value)}`
}

/**
 * 分转元（保留2位小数）
 * @example centToYuan(12345) -> 123.45
 */
export function centToYuan(cent: number | undefined | null): number {
  return Number(cent || 0) / 100
}

/**
 * 分转展示用元（四舍五入到0.1元）
 * @example centToDisplayYuan(12345) -> 123.5
 * @example centToDisplayYuan(12344) -> 123.4
 */
export function centToDisplayYuan(cent: number | undefined | null): number {
  return roundMoney(centToYuan(cent))
}

/**
 * 格式化分为角字符串（保留1位小数）
 * @example formatCent(12345) -> "123.5"
 * @example formatCent(12344) -> "123.4"
 */
export function formatCent(cent: number | undefined | null): string {
  return centToDisplayYuan(cent).toFixed(1)
}

/**
 * 格式化分为角字符串并添加货币符号
 * @example formatCentWithSymbol(12345) -> "¥123.5"
 */
export function formatCentWithSymbol(cent: number | undefined | null): string {
  return `¥${formatCent(cent)}`
}

/**
 * 元转分（四舍五入）
 * 用户输入金额时使用
 * @example yuanToCent(123.45) -> 12345
 * @example yuanToCent(123.456) -> 12346
 */
export function yuanToCent(yuan: number | undefined | null): number {
  return Math.round(Number(yuan || 0) * 100)
}
