package com.engine.htsc.ReimbursementFlow.tool;

import com.engine.htsc.ReimbursementFlow.model.NewUser;
import weaver.general.Util;
import weaver.interfaces.htsc.GlobatTools.JAVATools;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Logictools {

    //整合 如果角色  部门  有逻辑与或者逻辑或的操作
    public static boolean valueisdist(String value, NewUser newUser){
        boolean flag=false;
        if("".equals(value)){
            flag=true ;
        }else   if(value.indexOf("||")>0){
            for (String jsvalue:value.split("\\|\\|")){
                if(GetCointionType(jsvalue,newUser)){
                    flag=true;
                    break;
                }
            }
        }else  if(value.indexOf("&&")>0){
            //逻辑与的操作
            flag=true;
            for (String jsvalue:value.split("&&")){
                if(!GetCointionType(jsvalue,newUser)){
                    flag=false;
                    break;
                }
            }
        }else  if(GetCointionType(value,newUser)){
            flag=true;
        }
        return flag;
    }

    //判断报销人的参数是否对应
    public static boolean  GetCointionType(String js,NewUser newUser){
        boolean flag=true;
        if("".equals(js)){
            return flag;
        }
        if(js.indexOf("ST")>=0){
            //判断是包含关系还是等于关系
            String RoleCode=  newUser.getDeptLevelcode();
            //如果条件里存在值，但是报销人里没有，则返回错误
            if("".equals(RoleCode)){
                return false;
            }
            if(js.indexOf("ST_IN")>=0){
                //判断是否包含关系
                String jsPonit=js.replace("ST_IN","ST");
                return JAVATools.iscontaionString(RoleCode,jsPonit);
            }else{
                return JAVATools.isequestString(RoleCode,js);
            }
        }else if(js.indexOf("PT")>=0){
            //判断是包含关系还是等于关系
            String RoleCode=  newUser.getRoleCode();
            //如果条件里存在值，但是报销人里没有，则返回错误
            if("".equals(RoleCode)){
                return false;
            }
            if(js.indexOf("PT_IN")>=0){
                //判断是否包含关系
                String jsPonit=js.replace("PT_IN","PT");
                return JAVATools.iscontaionString(RoleCode,jsPonit);
            }else{
                return JAVATools.isequestString(RoleCode,js);
            }
        }if(js.indexOf("DT")>=0){
            //判断是包含关系还是等于关系
            String deptid=  newUser.getDepId();
            //如果条件里存在值，但是报销人里没有，则返回错误
            if("".equals(deptid)){
                return false;
            }
            if(js.indexOf("DT_IN")>=0){
                //判断是否包含关系
                String jsPonit=js.replace("DT_IN","DT");
                String  jsvalue=jsPonit.split("DT_")[1];
                return JAVATools.iscontaionString(deptid,jsvalue);
            }else{
                String  jsvalue=js.split("DT_")[1];
                return JAVATools.isequestString(deptid,jsvalue);
            }
        } else if(js.indexOf("HRM")>=0){
            String WorkCode=  newUser.getWorkCode();
            if("".equals(WorkCode)){ return false; }
            if(js.indexOf("HRM_IN")>=0){
                //判断是否包含关系
                String jsPonit=js.replace("HRM_IN","HRM");
                return JAVATools.iscontaionString(WorkCode,jsPonit);
            }else{
                return JAVATools.isequestString(WorkCode,js);
            }
        }
        return flag;
    }


    public static boolean getconitionparams(String tj, Map<String,Object> detailmap){
        boolean flag=false;
        if("".equals(tj)){
            return true;
        }
        String value="";
        List<String> list=new ArrayList();

        String[] split=tj.split("\\|\\|");
        for ( String tjsplitljy:split) {
            //开始做逻辑与操作
            String[] splitljy = tjsplitljy.split("\\&\\&");

            for (String tjsplitvalue : splitljy) {
                list=new ArrayList();
                if(tjsplitvalue.split("#").length==3){
                    list.add(tjsplitvalue.replace("#",""));
                }else {
                    list.add(tjsplitvalue);
                }

            }
            for (String tjvalue : list) {
                flag = iscontionifpar(tjvalue, detailmap);
                if (flag == false) {
                    break;
                }
            }
            if(flag==true){
                break;
            }
        }

        return flag;
    }


    public static boolean iscontionifpar(String tj,Map<String,Object> map){
        boolean flag=true;
        String[] tjtwo=getparamssiplit(tj);
        if(tjtwo==null){
            return false;
        }
        String key=tjtwo[0];
        String value=tjtwo[1];
        String conition=tjtwo[2];
        if (">=".equals(conition)){
            Double valuedouble= Util.getDoubleValue(Util.null2String(map.get(key)));
            if(!getcodintionisnull(valuedouble)){
                flag=false;
            }
            if( valuedouble<Util.getDoubleValue(value)){
                flag=false;
            }
        }else if ("<=".equals(conition)){
            Double valuedouble= Util.getDoubleValue(Util.null2String(map.get(key)));
            if(!getcodintionisnull(valuedouble)){
                flag=false;
            }
            if(valuedouble >Util.getDoubleValue(value)){
                flag=false;
            }
        }else if (">".equals(conition)){
            Double valuedouble= Util.getDoubleValue(Util.null2String(map.get(key)));
            if(!getcodintionisnull(valuedouble)){
                flag=false;
            }
            if(valuedouble <=Util.getDoubleValue(value)){
                flag=false;
            }
        }else if ("<".equals(conition)){
            Double valuedouble= Util.getDoubleValue(Util.null2String(map.get(key)));
            if(!getcodintionisnull(valuedouble)){
                flag=false;
            }
            if(valuedouble >=Util.getDoubleValue(value)){
                flag=false;
            }
        }else    if ("!=".equals(conition)){
            if(Util.null2String(map.get(key)).equals(value)){
                flag=false;
            }
        }else if ("=".equals(conition)){
            if(!Util.null2String(map.get(key)).equals(value) ){
                flag=false;
            }
        }
        return  flag;
    }

    public static boolean getcodintionisnull(double i){
        boolean flag=true;
        if(i<=0){
            flag=false;
        }
        return flag;
    }

    public static String[] getparamssiplit(String value){
        String[] values=new String[3];
        if(value.split(">=").length==2){
            values= JAVATools.ArrayCodyAtoB(value.split("="),values);
            values[2]=">=";
            return values;
        }
        if(value.split("<=").length==2){
            values=JAVATools.ArrayCodyAtoB(value.split("<="),values);
            values[2]="<=";
            return values;
        }
        if(value.split(">").length==2){
            values=JAVATools.ArrayCodyAtoB(value.split(">"),values);
            values[2]=">";
            return values;
        }
        if(value.split("<").length==2){
            values=JAVATools.ArrayCodyAtoB(value.split("<"),values);
            values[2]="<";
            return values;
        }

        if(value.split("!=").length==2){
            values=JAVATools.ArrayCodyAtoB(value.split("!="),values);
            values[2]="!=";
            return values;
        }

        if(value.split("=").length==2){
            values=JAVATools.ArrayCodyAtoB(value.split("="),values);
            values[2]="=";
            return values;
        }


        return null;
    }

}
