package com.caimei.www.utils;

import org.springframework.util.StringUtils;

import java.math.BigDecimal;

/**
 * Description
 *
 * @author : Charles
 * @date : 2020/6/22
 */
public class PriceUtil {
    /** 默认小数位 */
	private static final int DEFAULT_SCALE = 4;

	/**
	 * 两个实数比较
	 *
	 * @param v1 BigDecimal
	 * @param v2 BigDecimal
	 * @return int [1:v1>v2, 0:v1=v2, 1:v1<v2]
	 */
	public static int compare(Object v1, Object v2) {
		BigDecimal b1 = convert(v1);
		BigDecimal b2 = convert(v2);
		return b1.compareTo(b2);
	}
	/**
	 * 两个实数相加
	 *
	 * @param v1 BigDecimal
	 * @param v2 BigDecimal
	 * @return BigDecimal
	 */
	public static BigDecimal add(Object v1, Object v2) {
		BigDecimal b1 = convert(v1);
		BigDecimal b2 = convert(v2);
		return b1.add(b2);
	}
	/**
	 * 两个实数相减
	 *
	 * @param v1 BigDecimal
	 * @param v2 BigDecimal
	 * @return BigDecimal
	 */
	public static BigDecimal sub(Object v1, Object v2) {
		BigDecimal b1 = convert(v1);
		BigDecimal b2 = convert(v2);
		return b1.subtract(b2);
	}
	/**
	 * 两个实数相乘
	 *
	 * @param v1 BigDecimal
	 * @param v2 BigDecimal
	 * @return BigDecimal
	 */
	public static BigDecimal mul(Object v1, Object v2) {
		BigDecimal b1 = convert(v1);
		BigDecimal b2 = convert(v2);
		return b1.multiply(b2);

	}
	/**
	 * 两个实数相除,四舍五入到默认位数
	 *
	 * @param v1 BigDecimal
	 * @param v2 BigDecimal
	 * @return BigDecimal
	 */
	public static BigDecimal div(Object v1, Object v2) {
		return div(v1, v2, DEFAULT_SCALE);
	}
	/**
	 * 两个实数相除，默认四舍五入到scale位
	 *
	 * @param v1 BigDecimal
	 * @param v2 BigDecimal
	 * @param scale 小数位
	 * @return BigDecimal
	 */
	public static BigDecimal div(Object v1, Object v2, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException("四舍五入的位数不能为负数");
		}
		BigDecimal b1 = convert(v1);
		BigDecimal b2 = convert(v2);
		if (equal0(b2)) {
			throw new IllegalArgumentException("除数不能为0");
		}
		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
	}
	/**
	 * 类型转换函数
	 *
	 * @param o <T>
	 * @return BigDecimal
	 */
	private static BigDecimal convert(Object o) {
		if (o == null) {
			return BigDecimal.ZERO;
		} else if (o instanceof BigDecimal) {
			return (BigDecimal) o;
		}
		String str = o.toString();
		if (!StringUtils.isEmpty(str)) {
			return new BigDecimal(str);
		} else {
			return BigDecimal.ZERO;
		}
	}
	private static boolean equal0(Object v1) {
		BigDecimal b1 = convert(v1);
		return b1.compareTo(BigDecimal.ZERO) == 0;
	}

    /**
     * 根据价格返回价格等级
     * @param price 价格
     * @return priceGrade 价格等级
     */
    public static Integer getpriceGrade(Double price){
        int grade = 1;
        if (price > 50 * 10000) {
            grade = 5;
        } else if (price > 25 * 10000) {
            grade = 4;
        } else if (price > 10 * 10000) {
            grade = 3;
        } else if (price > 2.5 * 10000) {
            grade = 2;
        }
        return grade;
    }
}
