package com.sagacloud.utils;
/*
 * Author: Jxing
 * Create Time: 2018/10/30
 */

import com.alibaba.fastjson.JSONObject;

import java.util.Map;
import java.util.Set;

public class JSONUtils {

    public static boolean checkInfos(JSONObject infoNode, Map<String, Set<Object>> infoValueMap, boolean set, boolean accurate) {
        if(infoValueMap.size() == 0)
            return true;
        boolean isMatch = false;
        for(String value : infoValueMap.keySet()){
            // set = true 交集, 必须所有infoValueMap的key都保证isMatch = true才能通过
            // set = false 并集, 只要有一个infoValueMap的key保证isMatch == true 就能通过
            isMatch = false;
            Object infoValue = infoNode.get(value);
            Set<Object> valueSet = infoValueMap.get(value);
            // 匹配null值
            if(!infoNode.containsKey(value) && valueSet.contains(null)){
                isMatch = true;
            }else if(infoValue != null){ // 匹配值
                // 精确匹配
                if(valueSet.contains(infoValue)){
                     isMatch = true;
                }
                // 如果精确匹配没有匹配上, 并且accurate是模糊匹配, 并且 infoValue的值是String类型, 进行模糊匹配
                if(!isMatch && !accurate && infoValue instanceof String){
                    String strValue = (String)infoValue;
                    for(Object match : valueSet){
                        if(match == null)
                            continue;
                        if(match instanceof String){
                            if(strValue.contains((String)match)) {
                                isMatch = true;
                                break;
                            }
                        }
                    }
                }
            }
            // 取交集, 如果有一个没匹配到, 返回false
            if(set && !isMatch)
                return false;
            // 取并集, 匹配到一个就可以返回true
            if(!set && isMatch)
                return true;

        }
        return isMatch;
    }
}
