package com.qqchen.deploy.backend.workflow.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Schema属性注解，用于定义工作流节点表单字段的属性
 * 
 * <p>使用示例：
 * <pre>
 * {@code
 * @SchemaProperty(
 *     title = "项目",
 *     description = "选择项目",
 *     required = true,
 *     dataSource = @SchemaPropertyDataSource(
 *         type = "api",
 *         url = "/api/v1/projects",
 *         valueField = "id",
 *         labelField = "name"
 *     )
 * )
 * private String projectId;
 * }
 * </pre>
 * 
 * <p>支持的功能：
 * <ul>
 *   <li>基本属性：标题、描述、是否必填等</li>
 *   <li>数据源配置：支持动态数据源，如API调用</li>
 *   <li>数值范围：支持最大值和最小值限制</li>
 *   <li>枚举值：支持固定选项及其显示名称</li>
 *   <li>字段显示控制：支持隐藏字段</li>
 * </ul>
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SchemaProperty {
    /**
     * 字段标题
     */
    String title() default "";

    /**
     * 字段描述
     */
    String description() default "";

    /**
     * 是否必填
     */
    boolean required() default false;

    /**
     * 字段格式
     */
    String format() default "";

    /**
     * 控制字段是否在表单中显示
     */
    boolean hidden() default false;

    /**
     * 数据源配置，用于定义字段的数据来源
     * @see SchemaPropertyDataSource
     */
    SchemaPropertyDataSource dataSource() default @SchemaPropertyDataSource(type = "");

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

    /**
     * 最小值（用于数值类型）
     */
    int minimum() default Integer.MIN_VALUE;

    /**
     * 最大值（用于数值类型）
     */
    int maximum() default Integer.MAX_VALUE;

    /**
     * 枚举值（用于字符串类型）
     */
    String[] enumValues() default {};

    /**
     * 枚举值显示名称
     */
    String[] enumNames() default {};

    /**
     * 字段排序，值越小越靠前
     */
    int order() default Integer.MAX_VALUE;

    /**
     * 代码编辑器配置，用于配置Monaco Editor等代码编辑器的行为
     */
    CodeEditorConfig codeEditor() default @CodeEditorConfig;

    /**
     * 是否只读
     */
    boolean readOnly() default false;
}
