package com.hotent.base.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.fasterxml.jackson.databind.JsonNode;
import io.jsonwebtoken.lang.Assert;

/**
 * Map工具类
 * 
 * @company 广州宏天软件股份有限公司
 * @author heyifan
 * @email heyf@jee-soft.cn
 * @date 2018年4月11日
 */
public class MapUtil {
	/**
	 * 忽略大小写
	 * @param map
	 * @param key
	 * @param defaultVal :默认值
	 * @return 
	 * Object
	 * @exception 
	 * @since  1.0.0
	 */
	public static Object getIgnoreCase(Map<String,Object> map, String key,Object defaultVal) {
		Assert.isTrue(StringUtil.isNotEmpty(key), "获取Map中指定key的值时key不能为空");
		for (String k : map.keySet()) {
			if (key.equalsIgnoreCase(k)) {
				return map.get(k);
			}
		}
		return defaultVal;
	}

	/**
	 * 忽略大小写
	 * @param map
	 * @param key
	 * @param defaultVal :默认值
	 * @return
	 * Object
	 * @exception
	 * @since  1.0.0
	 */
	public static JsonNode getIgnoreCase(Map<String, JsonNode> map, String key, JsonNode defaultVal) {
		Assert.isTrue(StringUtil.isNotEmpty(key), "获取Map中指定key的值时key不能为空");
		for (String k : map.keySet()) {
			if (key.equalsIgnoreCase(k)) {
				return map.get(k);
			}
		}
		return defaultVal;
	}
	
	/**
	 * 忽略大小写
	 * @param map
	 * @param key
	 * @param defaultVal :默认值
	 * @return 
	 * Object
	 * @exception 
	 * @since  1.0.0
	 */
	public static boolean containsIgnoreKey(Map<String,Object> map, String key) {
		for (String k : map.keySet()) {
			if (key.equalsIgnoreCase(k)) {
				return true;
			}
		}
		return false;
	}
	
	public static Object getIgnoreCase(Map<String,Object> map, String key) {
		return getIgnoreCase(map, key, null);
	}
	
	public static Map<String,Object> buildMap(String key,Object val){
		 Map<String, Object> map = new HashMap<String, Object>();
		 map.put(key, val);
		 return map;
	}
	
	/**
	 * 获取Map中的字符串
	 * @param map
	 * @param key
	 * @return
	 */
	public static String getString(Map<String,Object> map, String key){
		Object object = map.get(key);
		if(object==null) return null;
		return object.toString();
	}
	
	/**
	 * 获取Map中的字符串（忽略key的大小写）
	 * 
	 * @param map
	 * @param key
	 * @return
	 */
	public static String getStringIgnoreKey(Map<String, Object> map, String key, String defaultVal) {
		Object valObj = getIgnoreCase(map, key, defaultVal);
		if (valObj != null) {
			if(valObj instanceof Date){
				SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				return dateFormat.format(valObj);
			} else {
				return valObj.toString();
			}
		}
		return defaultVal;
	}

	public static <T> void delByStartKey(Map<String,T> map,String key){
		if(key == null){
			map.remove(null);
			return ;
		}
		Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            String k = iterator.next();
            // 如果k刚好在要排除的key的范围中
            if ( StringUtil.isNotEmpty(k) && k.startsWith(key) ) {
                iterator.remove();
                map.remove(k);
            }
        }

	}
}
