package com.ruoyi.common.utils;

import cn.hutool.core.util.StrUtil;
import org.springframework.security.util.FieldUtils;

public class MyUtils {
    /**
     * 占位符${}内容替换
     *
     * @param data 拥有占位符属性的数据
     * @param input 输入的字符串
     * @param replacements 需替换的字段
     * @return 替换后字符串
     */
    public static String replaceBrackets(Object data, String input, String... replacements) {
        // 判断替换数据是否为空
        if (data == null) {
            throw new RuntimeException("data数据不能为空");
        }
        // 判断替换字段是否为空
        if (replacements == null || replacements.length < 1) {
            return input;
        }
        for (String replacement : replacements) {
            try {
                String placeholder = "${" + replacement + "}";
                String filedValue = FieldUtils.getFieldValue(data, replacement).toString();
                input = input.replace(placeholder, filedValue);
            } catch (Exception e) {
                String placeholder = "${" + replacement + "}";
                input = input.replace(placeholder, "");
            }
        }
        return input;
    }

    /**
     * 获取占位符${}中的字符串内容
     * @param str 字符串
     * @return 占位符${}中的字符串内容数组
     */
    public static String[] getSymbolContent(String str){
        //校验输入参数
        if(StrUtil.isBlank(str)){
            return null;
        }
        return StrUtil.subBetweenAll(str, "${", "}");
    }

    /**
     * 判断是否可转为Int类型
     *
     * @param str 字符串
     * @return 布尔值
     */
    public static boolean isConvertibleToInt(String str) {
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    /**
     * 判断是否为16进制，并将传入编号所有英文大写
     *
     * @param number 编号
     * @return 返回值
     */
    public static boolean checkHexNumber(String number) {
        String regex="^[A-Fa-f0-9]+$";

        if (StrUtil.isBlank(number)) {
            throw new RuntimeException("编号不能为空");
        }

        // 删除字符串中前导的零
        number = number.replaceFirst("^0+", "");

        return number.matches(regex);
    }
}
