package com.ydl.ydlcommon.utils;


import android.text.TextUtils;

import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.PatternSyntaxException;

/**
 * 字符串转换工具类
 * Created by xiongyu on 2017/3/17.
 */

public class StringUtils {

    /**
     * 处理文字中未显示的自定义表情
     *
     * @param orgin_str
     * @return
     */
    public static String CustomEmojiSub(String orgin_str) {
        int pre_index = orgin_str.lastIndexOf("[");
        if (pre_index != -1) {
            if (orgin_str.substring(pre_index).indexOf("]") != -1) {//表示包含了最后一个自定义表情
                return orgin_str;
            } else {
                return orgin_str.substring(0, pre_index) + "...";
            }
        } else {
            return orgin_str;
        }
    }


    public static String UrlToString(String url_str) {
        String deal_str = "";
        String type_str = url_str.substring(url_str.lastIndexOf("."));
        deal_str = url_str.replace("http", "ydl");
        deal_str = deal_str.replace(":", "a");
        deal_str = deal_str.replace("/", "a");
        deal_str = deal_str.replace(".", "a");
        deal_str = deal_str + "." + type_str;
        return deal_str;
    }

    /**
     * 检测是否有emoji表情
     *
     * @param source
     * @return
     */
    public static boolean containsEmoji(String source) {
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
                return true;
            }
        }
        return false;
    }

    /**
     * 判断该字符串是否为中文
     *
     * @param string
     * @return
     */
    public static boolean isChinese(String string) {
        int n = 0;
        for (int i = 0; i < string.length(); i++) {
            n = (int) string.charAt(i);
            if (!(19968 <= n && n < 40869)) {
                return false;
            }
        }
        return true;
    }

    /**
     * counter ASCII character as one, otherwise two
     *
     * @param str
     * @return count
     */
    public static int counterChars(String str) {
        // return
        if (TextUtils.isEmpty(str)) {
            return 0;
        }
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            int tmp = (int) str.charAt(i);
            if (tmp > 0 && tmp < 127) {
                count += 1;
            } else {
                count += 2;
            }
        }
        return count;
    }

    /**
     * 获取32位uuid
     *
     * @return
     */
    public static String get32UUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    public static String get36UUID() {
        UUID uuid = UUID.randomUUID();
        String uniqueId = uuid.toString();
        return uniqueId;
    }


    public static String StringFilter(String str) throws PatternSyntaxException {
        String result = "";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < str.length(); i++) {
            if (StringUtils.isEmojiCharacter(str.charAt(i))) {
                sb.append(str.charAt(i));
            }
        }
        result = sb.toString();
        return result;
    }

    public static boolean isEmojiCharacter(char codePoint) {
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) ||
                (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
                ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
                && (codePoint <= 0x10FFFF));
    }

    /***
     * 判断跳转H5还是打开原生页面
     * @param A
     * @return
     */
    public static Map<String, String> IsHttpReturn(String A) {
        Map<String, String> map = new HashMap<>();
        if (A.contains("http://") || A.contains("https://")) { //表明为跳转url
            map.put("jump_type", "url");
            if (A.contains("experts")) {//判断跳转那种类型的H5页面
                if (A.contains("search")) {
                    map.put("url_page", "experts_search");//专家搜索
                } else {
                    map.put("url_page", "experts");//专家主页
                }
            } else if (A.contains("ct/list")) {//免费体验
                map.put("url_page", "free_trial");
            } else if (A.contains("ceshi/detail") || A.contains("test/detail")) { //测试
                map.put("url_page", "test_detail");
            } else if (A.contains("ceshi/result") || A.contains("test/result")) { //测试
                map.put("url_page", "test_result");
            } else if (A.contains("ceshi/")) { //测试
                map.put("url_page", "test");
            } else {
                map.put("url_page", "other");//其他的
            }
            map.put("url", A);
        } else if (A.contains("ydl://")) {//表明跳转为原生
            map.put("jump_type", "native");
            String native_page = A.substring(6, A.indexOf("?"));
            map.put("native_page", native_page);
            map.putAll(TemporaryUtils.getUrlParams(A));

        } else {
            map.put("jump_type", "no");
        }

        return map;
    }

    /**
     * 对字符串进行MD5加密</br>
     * 如果返回为空,则表示加密失败
     *
     * @param s
     * @return
     */
    public static String md5(String s) {
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] strTemp = s.getBytes("utf-8");
            // 使用MD5创建MessageDigest对象
            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
            mdTemp.update(strTemp);
            byte[] md = mdTemp.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte b = md[i];
                // 将每个数(int)b进行双字节加密
                str[k++] = hexDigits[b >> 4 & 0xf];
                str[k++] = hexDigits[b & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            return null;
        }
    }

    public static boolean isEmpty(String s) {
        return s == null || s.length() == 0;
    }


    /**
     * 判断传入时间与当前时间是否是同一天
     *
     * @param last 需要被比较的时间
     * @return
     */
    public static boolean compareTime(String last) {
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//如2016-08-10
        if (TextUtils.isEmpty(last) || TextUtils.equals("0", last)) {
            return false;
        } else {
            long time = System.currentTimeMillis();
            Date date = new Date();
            date.setTime(time);
            String nowTime = simpleFormat.format(date);
            Date lastDate = new Date();
            lastDate.setTime(Long.valueOf(last));
            String lastTime = simpleFormat.format(lastDate);
            if (TextUtils.equals(lastTime.substring(0, 10), nowTime.substring(0, 10))) {
                //是同一天
                return true;
            } else {
                //不是同一天
                return false;
            }
        }
    }

    /**
     * 保留两位小数
     */
    public static String save2Double(double value){
        String str = "--";
        try {
            str = String.format("%.2f",value).toString();
        }catch (Exception e){
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 字符串以逗号分割转List
     */
    public static List<String> strToList(String str){
        List list = new ArrayList();
        if (TextUtils.isEmpty(str)){
            return list;
        }
        String[] ss = str.split("\\|");
        return Arrays.asList(ss);
    }
}