package com.sptg.common.core.util;

import com.sptg.common.core.constant.SymbolConstant;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.springframework.util.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * title: CommonUtil
 * package: com.sptg.common.core.util
 * description: 常用工具栏
 *
 *
 *
 */
public final class CommonUtil {

    /**
     * 功能描述: 自动填充零
     * @param length 指定长度
     * @param number 数字
     * @return String
     *
     *
     */
    public static String autoZeroFilling(int length,long number){
        String result = Long.toString(number);
        //  长度不足自动补0
        if (result.length() < length){
            StringBuilder sb = new StringBuilder();
            for (int i = result.length(); i < length; i++){
                sb.append("0");
            }
            result = sb.toString() + result;
        }
        return result;
    }

    /**
     * 功能描述: String字符串转Long类型数组
     * @param text 字符串，每个数字间通过“,”分割
     * @return List<Long>
     *
     *
     */
    public static List<Long> stringToLongList(String text) throws NumberFormatException{
        List<Long> resultList = new ArrayList<>();
        if (!StringUtils.isEmpty(text)) {
            String[] array = text.split(SymbolConstant.COMMA);
            for (String item : array) {
                if (StringUtils.hasText(item)) {
                    resultList.add(Long.parseLong(item));
                }
            }
        }
        return resultList;
    }

    /**
     * 功能描述: 生成随机数
     * @param length 随机数长度
     * @return int
     *
     *
     */
    public static int generateNumber(int length){
        double min = Math.pow(10,length - 1);
        double max = Math.pow(10, length);
        return (int)(new Random().nextInt((int) (max - min)) + min);
    }

    /**
     * 功能描述：判断当前时间是否在7:00-22:00之间
     * @return
     * @throws ParseException
     */
    public static boolean isTimeRange(String beginStr, String endStr)throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("HH:mm");
        Date now = df.parse(df.format(new Date()));
        Date begin = df.parse(beginStr);
        Date end = df.parse(endStr);
        Calendar nowTime = Calendar.getInstance();
        nowTime.setTime(now);
        Calendar beginTime = Calendar.getInstance();
        beginTime.setTime(begin);
        Calendar endTime = Calendar.getInstance();
        endTime.setTime(end);
        if (nowTime.before(endTime) && nowTime.after(beginTime)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 随机生成8位密码 工具类
     *
     */
    public static String getRandomPassword(Integer length) {
        if (length == null || length <= 0){
            length = 8;
        }
        Random rd = new Random(); // 创建随机对象
        String n = ""; // 保存随机数
        int rdGet; // 取得随机数
        do {
            if (rd.nextInt() % 2 == 1) {
                rdGet = Math.abs(rd.nextInt()) % 10 + 48; // 产生48到57的随机数(0-9的键位值)
            } else {
                Random rdm = new Random();
                if (rdm.nextInt() % 2 == 1) {
                    rdGet = Math.abs(rd.nextInt()) % 26 + 65; // 产生65到90的随机数(A-Z的键位值)
                }else{
                    rdGet = Math.abs(rd.nextInt()) % 26 + 97; // 产生97到122的随机数(a-z的键位值)
                }

            }
            char num1 = (char) rdGet; // int转换char
            String dd = Character.toString(num1);
            n += dd;
        } while (n.length() < length);// 设定长度，此处假定长度小于8
        return n;

    }

    /**
     * 得到中文首字母（中国 -> ZG）
     * @param str 需要转化的中文字符串
     * @return 大写首字母缩写的字符串
     */
    public static String getPinYinHeadChar(String str) {
        StringBuilder convert = new StringBuilder();
        for (int j = 0; j < str.length(); j++) {
            char word = str.charAt(j);
            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
            if (pinyinArray != null) {
                convert.append(pinyinArray[0].charAt(0));
            } else {
                convert.append(word);
            }
        }
        return convert.toString().toLowerCase();
    }

}
