package com.jkcredit.invoice.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.helpers.FormattingTuple;
import org.slf4j.helpers.MessageFormatter;

import java.util.Collection;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 *
 * @author 刘随阳
 * @version V4.1.0 注意：本内容仅限于杭州时代银通软件股份有限公司内部传阅，禁止外泄以及用于其他的商业目的
 */
public final class StringUtil {
    private static final Pattern PATTERN = Pattern.compile("\\s*|\t|\r|\n");

    private StringUtil() {

    }

    /**
     * 判断是否为空
     *
     * @param value 字符串
     * @return 是否
     * @author 刘随阳
     */
    public static boolean isEmpty(String value) {
        return StringUtils.isEmpty(value);
    }

    /**
     * 判断字符串是否不为空
     *
     * @param value 字符串
     * @return 是否
     * @author 刘随阳
     */
    public static boolean isNotEmpty(String value) {
        return !isEmpty(value);
    }

    /**
     * 判断字符串是否为空或者空白
     *
     * @param value 字符串
     * @return 是否
     * @author 刘随阳
     */
    public static boolean isBlank(String value) {
        return StringUtils.isBlank(value);
    }

    /**
     * 判断字符串是否不为空或者空白
     *
     * @param value 字符串
     * @return 是否
     * @author 刘随阳
     */
    public static boolean isNotBlank(String value) {
        return !isBlank(value);
    }

    /**
     * 将集合或数组以某拼接符拼接到一起形成新的字符串
     *
     * @param collection 集合
     * @param separator  拼接符
     * @return 字符串
     * @author 刘随阳
     */
    public static String join(Collection collection, String separator) {
        return StringUtils.join(collection, separator);
    }

    /**
     * 字符串是否包含于字符串数组
     *
     * @param value 字符串
     * @param array 字符串数组
     * @return true if value contains in array
     * @author hucx
     */
    public static boolean contains(String value, String[] array) {
        if (array == null) {
            return false;
        }
        for (String anArray : array) {
            if (value.equals(anArray)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 字符串替换
     *
     * @param text         old String
     * @param searchString 要被替换的字符串
     * @param replacement  要替换的字符串
     * @return new String
     * @author hucx
     */
    public static String replace(String text, String searchString, String replacement) {
        return StringUtils.replace(text, searchString, replacement);
    }

    /**
     * str字符串移除remove字符串开始的字符
     *
     * @param str    old String
     * @param remove 移除的字符串
     * @return new String
     * @author hucx
     */
    public static String removeStart(String str, String remove) {
        return StringUtils.removeStart(str, remove);
    }

    /**
     * str字符串移除remove字符串结尾的字符
     *
     * @param str    old字符串
     * @param remove 移除的字符串
     * @return new String
     * @author hucx
     */
    public static String removeEnd(String str, String remove) {
        return StringUtils.removeEnd(str, remove);

    }

    /**
     * 判断两个数据是否相等
     *
     * @param a
     * @param b
     * @return boolean
     * @throws
     * @createDate 2022/11/17 上午10:48
     * @author mashengyi
     */
    public static boolean equal(Object a, Object b) {
        return Objects.equals(a, b);
    }

    /**
     * @param formatterStr
     * @param param
     * @throws
     * @Description://格式化含有占位符{}的字符
     * @author jxy
     * @created 2021/12/8 17:06
     */
    public static String messageFormatter(String formatterStr, Object... param) {
        String rst;
        try {
            FormattingTuple ft = MessageFormatter.arrayFormat(formatterStr, param);
            rst = ft.getMessage();
        } catch (Exception e) {
            rst = formatterStr;
        }
        return rst;
    }

    /**
     * spring的字符串拆分
     *
     * @param source
     * @param split
     * @return java.lang.String[]
     * @throws
     * @createDate 2022/11/21 9:10
     * @author jxy
     */
    public static String[] split(String source, String split) {
        return org.springframework.util.StringUtils.delimitedListToStringArray(source, split);
    }



    /**
     * string字符串去除所有空格，制表符
     *
     * @param str
     * @return java.lang.String
     * @throws
     * @createDate 2023/2/15 上午11:23
     * @author mashengyi
     */
    public static String replaceBlank(String str) {
        String dest = "";
        if (str != null) {
            Matcher m = PATTERN.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }



    /**
     * string字符串去除所有空格，制表符
     *
     * @param jsonString
     * @return java.lang.String
     * @throws
     * @createDate 2023/2/15 上午11:23
     * @author mashengyi
     */
    public static String removeJSonField(String jsonString,String field) {

        String modifiedJsonString = "";
        try {
            // 将 JSON 字符串解析为对象
            JSONObject jsonObject = JSON.parseObject(jsonString);
            // 排除要忽略的字段
            jsonObject.remove(field);
            // 将修改后的对象转换回 JSON 字符串
            modifiedJsonString = JSON.toJSONString(jsonObject);
            // 打印结果
            return  modifiedJsonString;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return modifiedJsonString;
    }
}
