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

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

/**
 * Schema属性的数据源配置注解，用于定义表单字段的数据来源
 * 
 * <p>主要用途：
 * <ul>
 *   <li>定义动态数据源，如API接口</li>
 *   <li>配置数据字段映射关系</li>
 *   <li>设置字段间的依赖关系</li>
 *   <li>配置请求参数</li>
 * </ul>
 * 
 * <p>使用示例：
 * <pre>
 * {@code
 * @SchemaProperty(
 *     title = "Jenkins视图",
 *     description = "Jenkins视图名称",
 *     required = true,
 *     dataSource = @SchemaPropertyDataSource(
 *         type = "api",
 *         url = "/api/v1/jenkins/views",
 *         valueField = "name",
 *         labelField = "name",
 *         dependsOn = {"projectId"},
 *         params = {
 *             @SchemaPropertyDataSourceParam(name = "projectId", value = "${projectId}")
 *         }
 *     )
 * )
 * private String view;
 * }
 * </pre>
 */
@Target({})
@Retention(RetentionPolicy.RUNTIME)
public @interface SchemaPropertyDataSource {
    /**
     * 数据源类型，如 "api"、"enum" 等
     */
    String type() default "";

    /**
     * 数据源URL，当type为"api"时使用
     */
    String url() default "";

    /**
     * 值字段名称，用于指定选项值的来源字段
     */
    String valueField() default "value";

    /**
     * 标签字段名称，用于指定选项显示文本的来源字段
     */
    String labelField() default "label";

    /**
     * 依赖字段列表，用于指定当前字段依赖的其他字段
     * 当依赖字段值变化时，需要重新获取当前字段的选项数据
     */
    String[] dependsOn() default {};

    /**
     * 请求参数配置，用于API调用时传递参数
     * @see SchemaPropertyDataSourceParam
     */
    SchemaPropertyDataSourceParam[] params() default {};
} 