package cn.fateverse.query.entity.dto;

import cn.fateverse.query.entity.DataSourceManage;
import cn.fateverse.query.enums.DynamicSourceEnum;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 数据源管理对象 query_data_source
 *
 * @author clay
 * @date 2023-07-16
 */
@Data
@ApiModel("数据源管理Dto")
public class DataSourceManageDto {

    /**
     * 主键
     */
    @ApiModelProperty("主键")
    private Long id;

    /**
     * 数据源名称
     */
    @ApiModelProperty("数据源名称")
    @NotBlank(message = "数据源名称不能为空!")
    private String dsName;

    /**
     * 数据源密码
     */
    @ApiModelProperty("数据源用户名")
    @NotBlank(message = "数据源用户名不能为空!")
    private String username;

    /**
     * 数据源密码
     */
    @ApiModelProperty("数据源密码")
    private String password;

    /**
     * 数据源服务地址
     */
    @ApiModelProperty("数据源服务地址")
    private String host;

    /**
     * 数据源端口
     */
    @ApiModelProperty("数据源端口")
    private Long port;

    private String args;

    @ApiModelProperty("服务名称")
    private JSONObject params;

    /**
     * 数据源类型,匹配java枚举
     */
    @ApiModelProperty("数据源类型,匹配java枚举")
    @NotNull(message = "数据源类型不能为空!")
    private DynamicSourceEnum type;

    /**
     * 数据库名称
     */
    @ApiModelProperty("数据库名称")
    private String dbName;

    /**
     * 配置类型
     */
    @ApiModelProperty("数据源类型")
    @NotNull(message = "配置类型不能为空!")
    private Integer configType;

    /**
     * 数据源连接类型
     */
    @ApiModelProperty("数据源连接类型")
    private String url;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;

    public DataSourceManage toQueryDataSource() {
        DataSourceManage build = DataSourceManage.builder()
                .id(id)
                .dsName(dsName)
                .username(username)
                .password(password)
                .args(args)
                .params(JSON.toJSONString(params))
                .host(host)
                .port(port)
                .type(type)
                .dbName(dbName)
                .configType(configType)
                .url(url)
                .build();
        build.setRemark(remark);
        return build;
    }
}