package api.common.util;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class StringUtil {

    //* -------------------------------- D --------------------------------

    /**
     * 根据换行符分割
     *
     * @param string 字符串
     * @return
     */
    public static String[] splitByLineSeparator(String string) {
        return string.split(System.lineSeparator());
    }

    public static String doubleToString(double doubleNumber, int bit) {
        return String.format("%." + bit + "f", doubleNumber);
    }

    /**
     * 复制一个字符串
     * @param charArray 字符数组
     * @return 字符串
     */
    public static String charArrayToString(char[] charArray) {
        // 字符串存放在 java 字符串常量池,具有不变性
        return String.valueOf(charArray);
    }

    /**
     * 复制一个字符串
     * @param string 字符串
     * @return 字符串
     */
    public static String copy(String string) {
        // 字符串存放在 java 字符串常量池,具有不变性
        return string;
    }


    public static String[] splitByBlank(String string) {
        return string.split("\\s+");
    }

    public static String getRandomUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }




    public static String getRandomEightBitUUID() {
        String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
                "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
                "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
                "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
                "W", "X", "Y", "Z" };
        StringBuilder stringBuilder = new StringBuilder();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        for (int i = 0; i < 8; i++) {
            String str = uuid.substring(i * 4, i * 4 + 4);
            int x = Integer.parseInt(str, 16);
            stringBuilder.append(chars[x % 0x3E]);
        }
        return stringBuilder.toString().toLowerCase();
    }

    public static String getRandomCode() {
        return TimeUtil.getNow() + "";
    }

    public static boolean isEmpty(Object string) {
        return string == null || "".equals(string);
    }

    public static boolean isNotEmpty(Object string) {
        return !isEmpty(string);
    }


    /**
     * @param source 长字符串
     * @param target 子字符串
     * @return 包含个数
     */
    public static int countSubString(String source, String target) {
        if (isEmpty(source)|| isEmpty(target)) {
            return 0;
        }
        int count = 0;
        int index = 0;
        while ((index = source.indexOf(target, index)) != -1) {
            index = index + target.length();
            count++;
        }
        return count;
    }


    public static String replace(String string, String target, String replacement) {
        return string.replace(target, replacement);
    }

    /**
     * 从 begin 开始截取字符串
     *
     * @param string 原始字符串
     * @param begin  开始字符串
     * @return 截取后的字符串
     */
    public static String cut(String string, String begin) {
        int index = string.indexOf(begin);
        return string.substring(index);
    }


    public static String getUTF8BytesFromGBKString(String gbkStr) {
        int n = gbkStr.length();
        byte[] utfBytes = new byte[3 * n];
        int k = 0;
        for (int i = 0; i < n; i++) {
            int m = gbkStr.charAt(i);
            if (m < 128) {
                utfBytes[k++] = (byte) m;
                continue;
            }
            utfBytes[k++] = (byte) (0xe0 | (m >> 12));
            utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f));
            utfBytes[k++] = (byte) (0x80 | (m & 0x3f));
        }
        if (k < utfBytes.length) {
            byte[] tmp = new byte[k];
            System.arraycopy(utfBytes, 0, tmp, 0, k);
            return new String(tmp, StandardCharsets.UTF_8);
        }
        return new String(utfBytes, StandardCharsets.UTF_8);
    }


}