/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.hertzbeat.common.constants;

import java.util.Arrays;

/**
 * Jexl keywords enum
 */
public enum JexlKeywordsEnum {

    /**
     * Official reserved keywords
     * @reference https://commons.apache.org/proper/commons-jexl/reference/syntax.html
     */
    OR("or"),
    AND("and"),
    EQ("eq"),
    NE("ne"),
    LT("lt"),
    GT("gt"),
    LE("le"),
    GE("ge"),
    DIV("div"),
    MOD("mod"),
    NOT("not"),
    NULL("null"),
    TRUE("true"),
    FALSE("false"),
    NEW("new"),
    VAR("var"),
    DO("do"),
    WHILE("while"),
    BREAK("break"),
    CONTINUE("continue"),
    FUNCTION("function"),
    RETURN("return"),

    /**
     * Syntax-reserved keywords
     */
    IF("if"),
    ELSE("else"),
    FOR("for"),

    /**
     * Built-in functions reserve keywords
     */
    SIZE("size"),
    EMPTY("empty");


    private final String keyword;

    JexlKeywordsEnum(String keyword) {
        this.keyword = keyword;
    }

    public String getKeyword() {
        return keyword;
    }

    public static boolean match(String word) {
        if (word == null || word.trim().isEmpty()) {
            return false;
        }
        return Arrays.stream(values()).anyMatch(t -> t.keyword.equals(word));
    }

}