package incheon.ags.mrb.analysis.vo.request;

import incheon.com.config.annotation.NotSqlReserved;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Getter
@Setter
@Schema(description = "클러스터링 요청")
public class ClusteringRequestDTO extends AbstractAnalysisRequestDTO {

    @Schema(description = "클러스터링 결과가 되는 필드명")
    @NotSqlReserved
    @Size(max = 63)
    @Pattern(regexp = "^[A-Za-z_][A-Za-z0-9_]*$", message = "컬럼 이름은 영문 또는 _로 시작하고, 영문/숫자/_만 가능합니다.")
    String targetField;

    @Schema(description = "클러스터 개수")
    @javax.validation.constraints.NotNull(message = "클러스터 개수는 필수입니다.")
    Integer numberOfClusters;

    @Schema(description = "결과를 원형으로 출력할지 여부")
    Boolean asCircle = false;

    @Override
    protected Object jsonPart() {
        return new Object() {
            public final String targetField = ClusteringRequestDTO.this.targetField;
            public final Integer numberOfClusters = ClusteringRequestDTO.this.numberOfClusters;
            public final Boolean asCircle = ClusteringRequestDTO.this.asCircle;
        };
    }
}
