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.Pattern;
import javax.validation.constraints.Size;


@Getter
@Setter
@Schema(description = "포인트 집계 요청")
public class AggregatePointsRequestDTO extends AbstractBoundaryAnalysisRequestDTO {

    @Schema(description = "포인트 개수가 되는 필드명")
    @Pattern(regexp = "^[A-Za-z_][A-Za-z0-9_]*$", message = "컬럼 이름은 영문 또는 _로 시작하고, 영문/숫자/_만 가능합니다.")
    @NotSqlReserved
    private String countField = "count";

    @Schema(description = "통계 필드 목록 (쉼표로 구분된 필드명 문자열)")
    @Size(max = 63)
    @Pattern(regexp = "^[A-Za-z_][A-Za-z0-9_]*\\.[A-Za-z_][A-Za-z0-9_]*$", message = "통계 필드는 PREFIX.fieldName 형식이어야 합니다.")
    private String statisticsFields;

    @Override
    protected Object jsonPart() {
        return new Object() {
            public final String countField = AggregatePointsRequestDTO.this.countField;
            public final String statisticsFields = AggregatePointsRequestDTO.this.statisticsFields;
        };
    }
}