package com.seer.teach.common.utils;


import cn.hutool.core.util.NumberUtil;

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

/**
 * 金额转换工具类
 */
public class MoneyUtil {

    /**
     * 将元单位转换为分（乘以100）
     *
     * @param yuan 元金额，字符串形式（如 "0.01"）
     * @return 分单位的整数
     */
    public static Long yuanToCent(String yuan) {
        if (yuan == null || yuan.trim().isEmpty()) {
            return 0L;
        }
        return NumberUtil.mul(yuan, "100").longValue();
    }

    /**
     * 将元单位转换为分（乘以100）
     *
     * @param yuan 元金额，字符串形式（如 "0.01"）
     * @return 分单位的整数
     */
    public static Long yuanToCent(BigDecimal yuan) {
        if (yuan == null ) {
            return 0L;
        }
        BigDecimal cent = new BigDecimal("100");
        return NumberUtil.mul(yuan, cent).longValue();
    }

    /**
     * 将元单位转换为分（乘以100）
     *
     * @param yuan 元金额，字符串形式（如 "0.01"）
     * @return 分单位的整数
     */
    public static BigDecimal yuanToCentWithBigDecimal(BigDecimal yuan) {
        if (yuan == null ) {
            return BigDecimal.ZERO;
        }
        BigDecimal cent = new BigDecimal("100");
        return yuan.multiply(cent);
    }

    /**
     * 将分单位转换为元（除以100，并保留两位小数）
     *
     * @param cent 分金额
     * @return 元单位的 double 值
     */
    public static double centToYuan(long cent) {
        return NumberUtil.div(cent, 100, 2);
    }

    /**
     * 将分单位转换为元（除以100，并保留两位小数）
     *
     * @param cent 分金额
     * @return 元单位的 double 值
     */
    public static BigDecimal centToYuan(BigDecimal cent) {
        return NumberUtil.div(cent, 100, 2);
    }

    /**
     * 将学豆转换为金额
     *
     * @param coin          学豆数量
     * @param exchangeRatio 学豆兑换比例
     * @return 对应的金额
     */
    public static BigDecimal convertCoinToAmount(BigDecimal coin, BigDecimal exchangeRatio) {
        return coin.divide(exchangeRatio, 2, RoundingMode.HALF_UP);
    }

    /**
     * 将金额转换为学豆
     *
     * @param coin          学豆数量
     * @param exchangeRatio 学豆兑换比例
     * @return 对应的学豆
     */
    public static BigDecimal convertAmountToCoin(BigDecimal coin, BigDecimal exchangeRatio) {
        return coin.multiply(exchangeRatio);
    }
}