package cn.fateverse.query.entity.dto;

import cn.fateverse.common.decrypt.annotation.EncryptField;
import cn.fateverse.query.entity.UniQuery;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * 万能查询对象 query_uni_query
 *
 * @author clay
 * @date 2023-03-01
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("万能查询Dto")
public class UniQueryDto {

    /**
     * 自定义查询id
     */
    @ApiModelProperty("自定义查询id")
    @EncryptField
    private String id;

    @ApiModelProperty("数据源id")
    @NotNull(message = "重要参数不能为空")
    private Long dataSourceId;

    /**
     * 名称
     */
    @ApiModelProperty("名称")
    @NotBlank(message = "名称不能为空")
    private String uqName;

    /**
     * sql语句
     */
    @ApiModelProperty("sql语句")
    private String uqSql;

    /**
     * 描述
     */
    @ApiModelProperty("描述")
    @NotBlank(message = "描述不能为空")
    private String uqDescribe;

    /**
     * 发布
     */
    @ApiModelProperty("发布")
    private Boolean publish;

    /**
     * 预览:1,已预览 ,2 未预览
     */
    @ApiModelProperty("预览:1,已预览 ,2 未预览")
    private Boolean preview;

    /**
     * top图json数据
     */
    @ApiModelProperty("top图json数据")
    private String topJson;

    /**
     * 类型 1:普通 2:top图
     */
    @ApiModelProperty("类型 1:普通 2:top图")
    private Integer type;

    public Long getId() {
        if (null == id) {
            return -1L;
        } else {
            return Long.parseLong(id);
        }
    }

    public static UniQuery toUniQuery(UniQueryDto uniQuery) {
        return UniQuery.builder()
                .id(uniQuery.getId())
                .uqName(uniQuery.getUqName())
                .uqSql(uniQuery.getUqSql())
                .uqDescribe(uniQuery.getUqDescribe())
                .publish(uniQuery.getPublish())
                .preview(uniQuery.getPreview())
                .topJson(uniQuery.getTopJson())
                .type(uniQuery.getType())
                .build();
    }
}
