package cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplate.model.datatype;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;

/**
 * 设备模板属性 DeviceTemplateAttrDataSpecs 抽象类
 *
 * 用于表示设备模板属性数据的通用类型，根据具体的 "dataType" 字段动态映射到对应的子类。
 * 提供多态支持，适用于不同类型的数据结构序列化和反序列化场景。
 *
 * @author ruiqi
 */
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "dataType", visible = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = ModelTemplateAttrNumericDataSpec.class, name = "int"),
        @JsonSubTypes.Type(value = ModelTemplateAttrNumericDataSpec.class, name = "float"),
        @JsonSubTypes.Type(value = ModelTemplateAttrNumericDataSpec.class, name = "double"),
        @JsonSubTypes.Type(value = ModelTemplateAttrDateOrTextDataSpecs.class, name = "text"),
        @JsonSubTypes.Type(value = ModelTemplateAttrDateOrTextDataSpecs.class, name = "textarea"),
        @JsonSubTypes.Type(value = ModelTemplateAttrDateOrTextDataSpecs.class, name = "date"),
        @JsonSubTypes.Type(value = ModelTemplateAttrBoolOrEnumDataSpecs.class, name = "bool"),
        @JsonSubTypes.Type(value = ModelTemplateAttrBoolOrEnumDataSpecs.class, name = "enum"),
        @JsonSubTypes.Type(value = ModelTemplateAttrArrayDataSpecs.class, name = "array"),
        @JsonSubTypes.Type(value = ModelTemplateAttrStructDataSpecs.class, name = "struct")
})
public abstract class ModelTemplateAttrDataSpecs {

    /**
     * 数据类型
     */
    private String dataType;

}
