package com.elab.core.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 数据工具类
 *
 * @author ： liukx
 * @time ： 2020/4/7 - 14:07
 */
public class DataUtils {

    /**
     * 生成的唯一key
     *
     * @param separator 分割符号
     * @param str       参数内容
     * @return
     */
    public static String genUnionKey(String separator, Object... str) {
        List<Object> collect = Arrays.stream(str).filter(x -> ObjectUtils.isNotEmpty(x)).collect(Collectors.toList());
        return StringUtils.join(collect.toArray(), separator);
    }

    /**
     * 获取存在的key
     *
     * @param jsonObject
     * @param keys
     * @return
     */
    public static String getDefaultKey(JSONObject jsonObject, String... keys) {
        for (int i = 0; i < keys.length; i++) {
            if (jsonObject.containsKey(keys[i]) && jsonObject.get(keys[i]) != null) {
                return keys[i];
            }
        }
        return null;
    }

    /**
     * 获取存在key的值
     *
     * @param jsonObject
     * @param keys
     * @return
     */
    public static Object getDefaultValue(JSONObject jsonObject, String... keys) {
        for (int i = 0; i < keys.length; i++) {
            if (jsonObject.containsKey(keys[i])) {
                return jsonObject.get(keys[i]);
            }
        }
        return null;
    }

    public static JSONObject getJSONObject(Object obj) {
        String text = JSON.toJSONString(obj);
        return JSON.parseObject(text);
    }

    public static Integer getStringByIntegerValue(String num) {
        if (num != null) {
            try {
                return Integer.valueOf(num);
            } catch (Exception e) {

            }
        }
        return null;
    }

    public static Integer getIntegerValue(Integer value, int defaultValue) {
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    public static <T> T getDefaultValue(Object obj, Object defaultValue) {
        if (ObjectUtils.isEmpty(obj)) {
            return (T) defaultValue;
        }
        return (T) obj;
    }

}
