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

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.geotools.process.classify.ClassificationMethod;
import org.geotools.process.spatialstatistics.enumeration.KernelType;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

@Getter
@Setter
@Schema(description = "밀도 분석 요청")
public class DensityRequestDTO extends AbstractAnalysisRequestDTO{

    @Schema(description = "커널 함수 유형")
    KernelType kernelType = KernelType.Quadratic;

    @Schema(description = "속성 필드")
    String populationField;

    // 자동 계산하게 처리
//    @Schema(description = "출력 래스터의 셀 크기")
//    Double cellSize = 0.0;
//
//    @Schema(description = "커널 함수의 검색 반경")
//    Double searchRadius;

    @Schema(description = "분류 방법 (EQUAL_INTERVAL, QUANTILE, NATURAL_BREAKS)")
    @NotNull
    ClassificationMethod method;

    @Schema(description = "원하는 분류 구간 개수")
    @NotNull
    @Min(3)
    Integer numClasses;

    @Schema(description = "NoData 값")
    Double noData = 0.0;

    @Schema(description = "분류 별 폴리곤들을 단일 MultiPolygon으로 반환 유무")
    Boolean dissolve = false;

    @Override
    protected Object jsonPart() {
        return new Object() {
            public final KernelType kernelType = DensityRequestDTO.this.kernelType;
            public final String populationField = DensityRequestDTO.this.populationField;
//            public final Double cellSize = DensityRequestDTO.this.cellSize;
//            public final Double searchRadius = DensityRequestDTO.this.searchRadius;
            public final ClassificationMethod method = DensityRequestDTO.this.method;
            public final Integer numClasses = DensityRequestDTO.this.numClasses;
            public final Double noData = DensityRequestDTO.this.noData;
            public final Boolean dissolve = DensityRequestDTO.this.dissolve;
        };
    }
}
