package com.njcn.bpm.pojo.param;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.njcn.common.pojo.constant.PatternRegex;
import com.njcn.db.bo.BaseEntity;
import com.njcn.web.constant.ValidMessage;
import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.util.List;

/**
 * BPM 流程定义的拓信息
 * 主要解决 Flowable {@link org.flowable.engine.repository.ProcessDefinition} 不支持拓展字段，所以新建该表
 */
@Data
public class BpmProcessDefinitionInfoParam extends BaseEntity implements Serializable {


    /**
     * 流程定义的编号
     * <p>
     * 关联 ProcessDefinition 的 id 属性
     */
    private String processDefinitionId;
    /**
     * 流程模型的编号
     * <p>
     * 关联 Model 的 id 属性
     */
    private String modelId;

    /**
     * 图标
     */
    private String icon;
    /**
     * 描述
     */
    private String description;

    /**
     * 表单类型
     */
    private Integer formType;

    /**
     * 动态表单编号
     */
    private String formId;

    /**
     * 表单的配置
     */
    private String formConf;

    /**
     * 表单项的数组
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<String> formFields;


    /**
     * 自定义表单的提交路径，使用 Vue 的路由地址
     */
    private String formCustomCreatePath;

    /**
     * 自定义表单的查看路径，使用 Vue 的路由地址
     */
    private String formCustomViewPath;

    /**
     * 更新操作实体
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class BpmProcessDefinitionInfoUpdateParam extends BpmProcessDefinitionInfoParam {

        /**
         * 表Id
         */
        @ApiModelProperty("id")
        @NotBlank(message = ValidMessage.ID_NOT_BLANK)
        @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR)
        private String id;

    }


    /**
     * 分页查询实体
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class BpmProcessDefinitionInfoQueryParam extends BaseParam {

        @ApiModelProperty("标识-精准匹配")
        private String key;

    }

}
