package com.ema.common.utils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import org.apache.poi.ss.formula.functions.T;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * 数据转换工具类
 */
public class DataConvertUtil {

    /**
     * 对象转字符串
     *
     * @param bean
     * @return
     */
    public static String toStr(Object bean) {
        if (bean == null) {
            return null;
        }
        if (bean instanceof Date) {
            return DateUtil.format((Date) bean, "yyyy-MM-dd HH:mm:ss");
        }
        if (bean instanceof BigDecimal) {
            BigDecimal decimal = (BigDecimal) bean;
            return decimal.toPlainString();
        }
        //部分内容中含有 , 导致错行 替换该符号
        return format(bean.toString());
    }

    /**
     * 格式化字符串
     * 去除字符串中的空格、回车、换行符、制表符
     *
     * @param value
     * @return
     */
    public static String format(String value) {
        value = StrUtil.trim(value);
        if (StrUtil.isBlank(value) || "NULL".equalsIgnoreCase(value)) {
            return null;
        }

        //去除字符串中的空格、回车、换行符、制表符
        Matcher m = Pattern.compile("\\s*|\t|\r|\n").matcher(value);
        value = m.replaceAll("");

        if (NumberUtil.isNumber(value) && value.length() > 10) {
            return " " + value;
        }
        //部分内容中含有 , 导致错行 替换该符号
        return value.replaceAll(",", "，");
    }

    /**
     * 将id列表转换为字符串
     *
     * @param ids   id列表
     * @param regex 连接符
     * @return 字符串
     */
    public static String toStr(List<Object> ids, String regex) {
        if (CollUtil.isNotEmpty(ids)) {
            return CollUtil.join(ids, regex);
        }
        return "";
    }

    /**
     * 将字符串转换为id列表
     *
     * @param ids   字符串
     * @param regex 连接符
     * @param clazz 类型ss
     * @return id列表
     */
    public static List<T> toList(String ids, String regex, Class<T> clazz) {
        if (StrUtil.isNotBlank(ids)) {
            return Arrays.stream(ids.split(regex)).map(clazz::cast).collect(Collectors.toList());
        }
        return CollUtil.toList();
    }


}
