package common

import (
	"math"
	"strconv"
	"strings"
)

// MoneyNegation 金额取反 负负得正
func MoneyNegation(s string) string {
	switch {
	case s == "":
		return s
	case s[0] == '-':
		return s[1:]
	default:
		return "-" + s
	}
}

// IsAmountEqual 判断两个金额字符串是否相等
func IsAmountEqual(amount1, amount2 string) bool {
	// 规范化金额字符串
	normalizedAmount1 := normalizeAmount(amount1)
	normalizedAmount2 := normalizeAmount(amount2)
	if normalizedAmount1 == "" {
		normalizedAmount1 = "0"
	}
	if normalizedAmount2 == "" {
		normalizedAmount2 = "0"
	}

	// 转换为浮点数进行比较
	value1, err1 := strconv.ParseFloat(normalizedAmount1, 64)
	value2, err2 := strconv.ParseFloat(normalizedAmount2, 64)

	// 如果任意一个转换失败,则认为不相等
	if err1 != nil || err2 != nil {
		return false
	}

	// 比较浮点数
	return math.Abs(value2-value1) < 0.0001
}

// normalizeAmount 规范化金额字符串
func normalizeAmount(amount string) string {
	// 去掉逗号和多余的空格
	return strings.ReplaceAll(strings.TrimSpace(amount), ",", "")
}

// MoneyNormalize 金额标准化 "1,234.56" -> "1234.56"
func MoneyNormalize(s string) string {
	return strings.ReplaceAll(s, ",", "")
}