package com.ruoyi.common.utils;

import java.math.BigDecimal;

/**
 * @author wjh
 * 2025/1/17
 */
public class MathUtils {


    /**
     * 判断a和b的值是否一致
     */
    public static boolean equals(BigDecimal a, BigDecimal b) {
        return a != null && b != null && a.compareTo(b) == 0;
    }


    public static boolean equals(Integer a, Integer b) {
        return a != null && b != null && a.equals(b);
    }

    /**
     * 加法
     */
    public static BigDecimal addDecimal(BigDecimal... values) {
        BigDecimal result = BigDecimal.ZERO;
        for (BigDecimal value : values) {
            if (value != null) {
                result = result.add(value);
            }
        }
        return result;
    }

    /**
     * 减法
     */
    public static BigDecimal subtractDecimal(BigDecimal a, BigDecimal ...values) {
        BigDecimal result = a;
        for (BigDecimal value : values) {
            if (value != null) {
                result = result.subtract(value);
            }
        }
        return result;
    }

    /**
     * 乘法
     */
    public static BigDecimal mulDecimal(BigDecimal a, BigDecimal b) {
        if (a == null || b == null) {
            return BigDecimal.ZERO;
        }
        return a.multiply(b);
    }

    // 把Integer转为Long类型
    public static Long IntegerToLong(Integer num) {
        return num == null ? null : Long.valueOf(num);
    }

    // 判断a是否大于b
    public static boolean biggerThan(BigDecimal a, BigDecimal b) {
        if (a == null) {
            a = BigDecimal.ZERO;
        }
        if (b == null) {
            b = BigDecimal.ZERO;
        }
        return a.compareTo(b) > 0;
    }

    // 判断a是否小于b
    public static boolean smallerThan(BigDecimal a, BigDecimal b) {
        if (a == null) {
            a = BigDecimal.ZERO;
        }
        if (b == null) {
            b = BigDecimal.ZERO;
        }
        return a.compareTo(b) < 0;
    }

    // 默认值
    public static BigDecimal dv(BigDecimal value) {
        return dv(value, BigDecimal.ZERO);
    }

    // 默认值
    public static BigDecimal dv(BigDecimal value, BigDecimal defaultValue) {
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    // 默认值
    public static Integer dv(Integer value) {
        return dv(value, 0);
    }

    // 默认值
    public static Integer dv(Integer value, Integer defaultValue) {
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    // 获取最小值
    public static BigDecimal min(BigDecimal ...values) {
        if (values == null || values.length == 0) {
            return null;
        }
        BigDecimal min = values[0];
        for (int i = 1; i < values.length; i++) {
            BigDecimal value = values[i];
            if (value == null) {
                continue;
            }
            if (min == null || value.compareTo(min) < 0) {
                min = value;
            }
        }
        return min;
    }
}
