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

import java.lang.annotation.*;

import net.northking.cctp.element.core.type.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Argument {

    /**
     * 参数名称
     *
     * @return
     */
    String name();

    /**
     * 参数描述
     *
     * @return
     */
    String comment();

    /**
     * 参数类型
     *
     * @return
     */
    DataType type();

    /**
     * 参数来源
     *
     * @return
     */
    ParamScope scope() default ParamScope.ARGS;

    /**
     * 输入框类型
     *
     * @return
     */
    InputType inputType() default InputType.text;

    /**
     * 是否必输
     * 必输
     *
     * @return
     */
    boolean required() default true;

    /**
     * 枚举类候选值
     *
     * @return
     */
    Class<? extends EnumClass> enumValues() default NullEnum.class;

    /**
     * 默认值
     *
     * @return
     */
    String defaultValue() default "";

    /**
     * 是否默认参数显示
     * 默认显示
     *
     * @return
     */
    boolean defaultDisplay() default true;

    /**
     * Validate parameter
     *
     * @return
     */
    boolean notNull() default true;

    /**
     * Use * instead when printing logs
     *
     * @return
     */
    boolean hideSensitive() default false;

    /**
     * Related to the execution environment flag
     *
     * @return
     */
    boolean relateEnv() default false;

    /**
     * Expression flag
     *
     * @return
     */
    boolean expression() default false;

}