package com.m2pool.manage.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * @Description 算力转换
 * @Date 2024/6/13 10:54
 * @Author dy
 */
public class PowerUnitUtils {

    /**
     * 获取某个算力值 对应应该换算的单位 和单位符号值
     * @param value
     * @return
     */
    public static NetPowerUnit getPowerUnit(BigDecimal value){
        NetPowerUnit unit = new NetPowerUnit();
        //默认1K 以下
        unit.setUnit("H/s");
        unit.setUnitValue(BigDecimal.valueOf(1));
        if (value != null){
            //ps BigDecimal最大上限少于1000*1000*1000*1000*10 所以需要中间值 gValue
            BigDecimal gValue = value.divide(BigDecimal.valueOf(1000000000), 2, RoundingMode.HALF_UP);
            if (gValue.compareTo(BigDecimal.valueOf(1000L *1000*1000*10)) >= 0){
                //10E
                unit.setUnit("EH/s");
                unit.setUnitValue(BigDecimal.valueOf(1000L*1000*1000*1000*1000*1000));
            }
            else if (gValue.compareTo(BigDecimal.valueOf(1000*1000*10)) >= 0){
                //10P -10E

                unit.setUnit("PH/s");
                unit.setUnitValue(BigDecimal.valueOf(1000L*1000*1000*1000*1000));
            }
            else if (gValue.compareTo(BigDecimal.valueOf(1000 * 10)) >= 0){
                //10 T -  10P
                unit.setUnit("TH/s");
                unit.setUnitValue(BigDecimal.valueOf(1000L*1000*1000*1000));
            }
            else if (value.compareTo(BigDecimal.valueOf(1000L *1000*1000 * 10)) >= 0){
                //10G - 10T
                unit.setUnit("GH/s");
                unit.setUnitValue(BigDecimal.valueOf(1000L*1000*1000));
            }
            else if (value.compareTo(BigDecimal.valueOf(1000*1000*10)) >= 0){
                //10M - 10G
                unit.setUnit("MH/s");
                unit.setUnitValue(BigDecimal.valueOf(1000L*1000));
            }
            else if (value.compareTo(BigDecimal.valueOf(1000 * 10)) >= 0){
                //10K-10M
                unit.setUnit("KH/s");
                unit.setUnitValue(BigDecimal.valueOf(1000));
            }
        }


        return unit;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class NetPowerUnit{
        private String unit;
        private BigDecimal unitValue;
    }

}
