package cn.axzo.workflow.common.model.request.bpmn.model.doc;

import cn.axzo.workflow.common.enums.FileTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;

import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;

/**
 * 创建模型关联的文档
 *
 * @author wangli
 * @since 2025-03-27 14:50
 */
@ApiModel("创建模型关联的文档")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class DocCreateDTO implements Serializable {

    /**
     * 关联到的模型 ID
     */
    @ApiModelProperty(value = "文档被关联到的模型 ID")
    @NotBlank(message = "模型 ID 不能为空")
    private String modelId;

    /**
     * 模型对应业务 KEY
     */
    @ApiModelProperty(value = "模型对应的业务 ID")
    @NotBlank(message = "模型 KEY 不能为空")
    private String modelKey;
    /**
     * 文档关联ID
     * <p>
     * word/excel 对应 wps 的 Id，
     * hp 对应是content 表的主键（前端新建时不回传）
     * pdf 对应 oss 中的 fileKey
     */
    @ApiModelProperty(value = "底层文件关联标识")
    private String fileRelationId;

    /**
     * 文件名称
     */
    @ApiModelProperty(value = "文件名称")
    private String fileName;

    /**
     * 模板名称
     */
    @ApiModelProperty(value = "模板名称")
    private String templateName;

    /**
     * 自动归档位置(本期不实现)
     */
    private String location;

    /**
     * 文档类型
     * <p>
     * WORD("word", "文本"),
     * EXCEL("excel", "表格"),
     * HIPRINT("hiprint", "智能文档"),
     * PDF("pdf", "PDF"),
     */
    @ApiModelProperty(value = "文件类型")
    private FileTypeEnum fileType;

    /**
     * 业务标签
     */
    @ApiModelProperty(value = "业务标签")
    private String tag;

    /**
     * 启用状态
     */
    @Builder.Default
    @ApiModelProperty(value = "启用状态")
    private Boolean status = true;

    /**
     * 是否是临时文件
     */
    @Builder.Default
    @ApiModelProperty(value = "是否是临时文件，默认 false")
    private Boolean tempFile = false;
    /**
     * 是否必选
     */
    @Builder.Default
    @ApiModelProperty(value = "是否必选")
    private Boolean require = false;

    /**
     * HiPrint文件类型，需要回传
     */
    @ApiModelProperty(value = "HiPrint文件类型，需要回传,其他类型无视该字段")
    private String content;

    /**
     * 租户 ID
     */
    @ApiModelProperty(value = "租户 ID")
    @Builder.Default
    private String tenantId = NO_TENANT_ID;
}
