package com.wechat.common.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;


public class NumberUtils extends BaseUtils {
    /**
     * 将字符串转换为数字
     * 
     * @param str 字符串
     * @param min 是否设置成最大值。 如果为false， 当转换异常时返回int的最大值
     * @return 转换后的数字
     */
    public static int stringToInt(String str, boolean min) {
        int result = 0;
        try {
            result = Integer.parseInt(str);
        } catch (Exception e) {
            if (!min) {
                result = Integer.MAX_VALUE;
            }
        }
        return result;
    }
    
    /**
     * 将字符串转换为int
     * 
     * @param str
     * @param min
     * @return
     */
    public static int stringToInt(String str, int defult) {
    	int result = 0;
        try {
            result = Integer.parseInt(str);
        } catch (Exception e) {
           	result = defult;
        }
        return result;
    }

    /**
     * Integer 转换成Short
     * 
     * @param intValue
     * @return
     */
    public static Short intToShort(Integer intValue) {
        //TODO bug fix
        if (null == intValue) {
            return null;
        }
        return Short.valueOf(String.valueOf(intValue));
    }

    /**
     * 将字符串转换为long
     * 
     * @param str
     * @param min
     * @return
     */
    public static long stringToLong(String str, boolean min) {
        long result = 0;
        try {
            result = Long.parseLong(str);
        } catch (Exception e) {
            if (!min) {
                result = Long.MAX_VALUE;
            }
        }
        return result;
    }
    
    /**
     * 将字符串转换为long
     * 
     * @param str
     * @param min
     * @return
     */
    public static long stringToLong(String str, long defult) {
    	long result = 0;
        try {
            result = Long.parseLong(str);
        } catch (Exception e) {
           	result = defult;
        }
        return result;
    }

    /**
     * Integer 转换成long
     * 
     * @param intValue
     * @return
     */
    public static long intTolong(Integer intValue) {
        //TODO bug fix
        if (null == intValue) {
            return 0;
        }
        return Long.valueOf(String.valueOf(intValue));
    }

    /**
     * 将字符串转换为Short
     * 
     * @param str
     * @param min
     * @return
     */
    public static Short stringToShort(String str, boolean min) {
        Short result = 0;
        try {
            result = Short.parseShort(str);
        } catch (Exception e) {
            if (!min) {
                result = Short.MAX_VALUE;
            }
        }
        return result;
    }
    
    /**
     * 将字符串转换为Short
     * 
     * @param str
     * @param min
     * @return
     */
    public static Short stringToShort(String str, Short defult) {
        Short result = 0;
        try {
            result = Short.parseShort(str);
        } catch (Exception e) {
           	result = defult;
        }
        return result;
    }
    
    /**
     * 将字符串转换为Bety
     * 
     * @param str
     * @param min
     * @return
     */
    public static Byte stringToByte(String str, boolean min) {
    	Byte result = 0;
        try {
            result = Byte.parseByte(str);
        } catch (Exception e) {
            if (!min) {
                result = Byte.MAX_VALUE;
            }
        }
        return result;
    }

    /**
     * Short 比较大小
     * 
     * @param s1 参数
     * @param s2 参数
     * @return 比较结果
     */
    public static int compareShort(Short s1, Short s2) {
        if (s1 == null) {
            s1 = 0;
        }
        if (s2 == null) {
            s2 = 0;
        }
        return s1.compareTo(s2);
    }
    
    /**
     * Long转String
     * @param longVal
     * @return
     */
    public static String longToString(Long longVal){
        if(longVal == null){
            return null;
        }else{
            return Long.toString(longVal);
        }
    }
    
    /**
     * string 转BigDecimal
     * @param str
     * @return
     */
    public static BigDecimal stringToBigDecimal(String str){
        BigDecimal result = new BigDecimal(0);
        try {
            result = new BigDecimal(str);
        } catch (Exception e) {
            
        }
        return result;
    }
    
    /**
     * 保留小数(位数由传入参数决定)
     * @param str 传入参数
     * @param digital 保留几位小数
     * @return 
     */
    public static String stringToHalfUp(String str, int digital) {
        BigDecimal b = stringToBigDecimal(str);
        if (b == null) {
            return null;
        }
        return b.setScale(digital, RoundingMode.HALF_UP).toString();
    }
    
    public static String stringToConUnit(String str) {
        BigDecimal b = stringToBigDecimal(str);
        if (b == null) {
            return null;
        }
        if (b.compareTo(new BigDecimal(10000)) < 0) {
            // 小于10000的时候没有单位
            return b.toString();
        } else if (b.compareTo(new BigDecimal(100000000)) >= 0) {
            // 大于1亿
            return null;
        } else if (b.compareTo(new BigDecimal(10000)) >= 0 && b.compareTo(new BigDecimal(100000000)) < 0) {
            // 大于1万，小于1亿
            return null;
        } else {
            return null;
        }
    }
    
    /**
     * Decimal 类型判空
     * @param longVal
     * @return
     */
    public static boolean isEmpty(BigDecimal val){
        if(val == null){
            return true;
        }
        if(val.compareTo(new BigDecimal(0)) == 0)
        {
            return true;
        }
        return false;
    }
    
    /**
     * 当数据类型属于BigDecimal时,转化操作
     * 
     * @param bd
     * @return
     */
    public static BigDecimal formatBigDecimal(String bd) {

        BigDecimal temp = BigDecimal.ZERO;

        // 传值为空时
        if (StringsUtils.isEmpty(bd)) {
            return temp;
        }
        else {
            bd = bd.trim();
        }

        if (bd.startsWith(".")) {
            bd = "0" + bd;
        }

        if (StringsUtils.isBigDecimal(bd)) {
            temp = new BigDecimal(bd);
        }

        return temp;
    }
}
