package net.northking.cctp.element.core.reflect;

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

import net.northking.cctp.element.core.IExecuteContext;
import net.northking.cctp.element.core.keyword.KeywordArgument;
import net.northking.cctp.element.core.keyword.KeywordReturn;

public interface IKeywordInvoker {

    /**
     * Keyword name
     *
     * @return
     */
    String getName();

    /**
     * keyword alias
     *
     * @return
     */
    String getAlias();

    /**
     * Get keyword all argument list information
     *
     * @return
     */
    List<KeywordArgument> getArguments();

    /**
     * Get keyword return
     *
     * @return
     */
    KeywordReturn getReturn();

    /**
     * invoke keyword
     *
     * @param args
     * @return
     */
    Object invoke(Map<String, Object> args, IExecuteContext context) throws Exception;

    /**
     * Get keyword documentation
     *
     * @return
     */
    String getDocumentation();

    /**
     * Deprecated keyword
     *
     * @return
     */
    boolean isDeprecated();

    /**
     * Web page hidden
     *
     * @return
     */
    boolean isBizHidden();

    /**
     * Get keyword category
     *
     * @return
     */
    String getCategory();

    /**
     * Get keyword getAttributes
     *
     * @return
     */
    String getAttributes();

    boolean isCommonlyUse();
}