package com.casic.missiles.utils;

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

/**
 * @Description: 单位转换工具
 * @Author: wangpeng
 * @Date: 2024/1/12 10:54
 */
public class UnitConvertUtil {

    /**
     * 频率单位换算：Hz、kHz、MHz、GHz、THz
     * @param valueOne 需要换算的数值
     * @param valueUnit 需要换算的数值单位
     * @param finalUnit 需要换算后的单位
     * @return 换算后的数据
     */
    public static BigDecimal frequencyConvert(String valueOne, String valueUnit, String finalUnit) {
        BigDecimal value = new BigDecimal(valueOne);
        if (valueUnit.equals(finalUnit)) {
            return value;
        }
        BigDecimal processValue = BigDecimal.ZERO;
        BigDecimal resultValue = BigDecimal.ZERO;
        //1、将valueOne转为Hz对应值
        switch (valueUnit) {
            case "kHz":
                processValue = value.multiply(new BigDecimal("1000"));
                break;
            case "MHz":
                processValue = value.multiply(new BigDecimal("1000000"));
                break;
            case "GHz":
                processValue = value.multiply(new BigDecimal("1000000000"));
                break;
            case "THz":
                processValue = value.multiply(new BigDecimal("1000000000000"));
                break;
            default:
                processValue = value;
                break;
        }
        //2、将valueOne转为finalUnit对应值
        switch (finalUnit) {
            case "kHz":
                resultValue = processValue.divide(new BigDecimal("1000"), 4, RoundingMode.DOWN);
                break;
            case "MHz":
                resultValue = processValue.divide(new BigDecimal("1000000"), 4, RoundingMode.DOWN);
                break;
            case "GHz":
                resultValue = processValue.divide(new BigDecimal("1000000000"), 4, RoundingMode.DOWN);
                break;
            case "THz":
                resultValue = processValue.divide(new BigDecimal("1000000000000"), 4, RoundingMode.DOWN);
            default:
                resultValue = processValue;
                break;
        }
        return resultValue;
    }

    /**
     * 根据数值和单位得到响应保留小数位数后的数值，:kHz保留小数后3位、MHz 保留小数后6位、GHz保留小数后9位、THz保留小数后12位
     * @param valueUnit 单位
     * @param value 待保留小数位数的员数值
     * @return 保留指定小数位数的数值
     */
    public static BigDecimal valueDecimalConvert(String valueUnit, String value) {
        BigDecimal resultValue = new BigDecimal(value);
        switch (valueUnit) {
            case "kHz":
                resultValue = resultValue.setScale(3, RoundingMode.DOWN);
                break;
            case "MHz":
                resultValue = resultValue.setScale(6, RoundingMode.DOWN);
                break;
            case "GHz":
                resultValue = resultValue.setScale(9, RoundingMode.DOWN);
                break;
            case "THz":
                resultValue = resultValue.setScale(12, RoundingMode.DOWN);
                break;
            default:
                break;
        }
        return resultValue;
    }
}
