package com.fastcashier.lib_common.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class StringPriceFormatUtils {

    /**
     * 分转元
     *
     * @param p
     * @return
     */
    public static String transStringPriceToDecimalString(String p) {
        DecimalFormat numberFormat = new DecimalFormat("0.00");
        //防止参数不合法异常崩溃
        try {
            BigDecimal price = new BigDecimal(p);
            BigDecimal x = new BigDecimal("100");
            return price.divide(x, 2, RoundingMode.HALF_UP).toString();
        } catch (Exception ex) {
            ex.printStackTrace();
            //空或转换异常则显示--.--
            return "--.--";
        }

    }

    public static String transDoubleStringPriceToDecimalString(String p) {
        DecimalFormat numberFormat = new DecimalFormat("0.00");
        //防止参数不合法异常崩溃
        try {
            Double price = Double.parseDouble(p);
            return numberFormat.format(price / 100.00);
        } catch (Exception ex) {
            ex.printStackTrace();
            //空或转换异常则显示--.--
            return "--.--";
        }

    }


    public static String transStringPriceToDecimalString(double p) {
        DecimalFormat numberFormat = new DecimalFormat("0.00");
        //防止参数不合法异常崩溃
        try {
            return numberFormat.format(p / 100.00);
        } catch (Exception ex) {
            ex.printStackTrace();
            //空或转换异常则显示--.--
            return "--.--";
        }

    }

    /**
     * 字符元转字符分
     *
     * @param yuan 字符元
     * @return 字符分
     */
    public static String transStringYuan2Fen(String yuan) {
        String result = yuan;
        String tmp1 = "", tmp2 = "";
        if (yuan.contains(".")) {
            int index = yuan.indexOf(".");
            tmp1 = yuan.substring(0, index);
            tmp2 = yuan.substring(index + 1, yuan.length());
            result = yuan.replace(".", "");
            if (tmp2.length() <= 0) {
                result = result + "00";
            } else if (tmp2.length() == 1) {
                result = result + "0";
            } else if (tmp2.length() > 2) {
                //如果小数点后有3位或以上说明服务器出现异常，此时仍然只取前两位
                result = result.substring(0, index + 2);
            }
        } else {
            result = result + "00";
        }
        return result;
    }

    /**
     * 获取实付金额，单位：分
     *
     * @param totalPrice 总价，单位：元
     * @param promPrice  优惠价，单位：元
     * @return 实付金额，单位：分
     */
    public static String getPayPriceFenStringFromYuan(String totalPrice, String promPrice) {
        try {
            int totalPriceInt = Integer.parseInt(transStringYuan2Fen(totalPrice));
            int promPriceInt = Integer.parseInt(transStringYuan2Fen(promPrice));
            int payPriceInt = totalPriceInt - promPriceInt;
            //检查数字正确性
            if (totalPriceInt < promPriceInt ||
                    totalPriceInt < 0 ||
                    promPriceInt < 0 ||
                    payPriceInt < 0) {
                //参数不正确，返回0
                return "0";
            }
            return payPriceInt + "";
        } catch (Exception ex) {
            ex.printStackTrace();
            return "0";
        }
    }

    /**
     * 获取实付金额，单位：元
     *
     * @param totalPrice 总价，单位：元
     * @param promPrice  优惠价，单位：元
     * @return 实付金额，单位：元
     */
    public static String getPayPriceYuanStringFromYuan(String totalPrice, String promPrice) {
        try {
            int totalPriceInt = Integer.parseInt(transStringYuan2Fen(totalPrice));
            int promPriceInt = Integer.parseInt(transStringYuan2Fen(promPrice));
            int payPriceInt = totalPriceInt - promPriceInt;
            //检查数字正确性
            if (totalPriceInt < promPriceInt ||
                    totalPriceInt < 0 ||
                    promPriceInt < 0 ||
                    payPriceInt < 0) {
                //参数不正确，返回0
                return "0";
            }
            return transStringPriceToDecimalString(payPriceInt);
        } catch (Exception ex) {
            ex.printStackTrace();
            return "0";
        }
    }

    /**
     * 获取实付金额，单位：分
     *
     * @param totalPrice 总价，单位：分
     * @param promPrice  优惠价，单位：分
     * @return 实付金额，单位：分
     */
    public static String getPayPriceFenStringFromFen(String totalPrice, String promPrice) {
        try {
            int totalPriceInt = Integer.parseInt(totalPrice);
            int promPriceInt = Integer.parseInt(promPrice);
            int payPriceInt = totalPriceInt - promPriceInt;
            //检查数字正确性
            if (totalPriceInt < promPriceInt ||
                    totalPriceInt < 0 ||
                    promPriceInt < 0 ||
                    payPriceInt < 0) {
                //参数不正确，返回0
                return "0";
            }
            return payPriceInt + "";
        } catch (Exception ex) {
            ex.printStackTrace();
            return "0";
        }
    }
}
