package com.kamco.cd.kamcoback.inference.dto;

import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.locationtech.jts.geom.Geometry;

public class InferenceResultShpDto {

  @Getter
  @Setter
  public static class Basic {

    // ===== 식별 =====
    private Long geoUid;
    private UUID uuid;

    // ===== 그룹 키 =====
    private Integer stage;
    private Long mapId;
    private Integer input1; // compare_yyyy
    private Integer input2; // target_yyyy

    // ===== 추론 결과 =====
    private Float cdProb;

    private String beforeClass;
    private Float beforeProbability;

    private String afterClass;
    private Float afterProbability;

    // ===== 공간 정보 =====
    private Geometry geometry;
    private Float area;

    /** Entity → DTO 변환 */
    public static Basic from(MapSheetAnalDataInferenceGeomEntity e) {
      Basic d = new Basic();

      d.geoUid = e.getGeoUid();
      d.uuid = e.getUuid();

      d.stage = e.getStage();
      d.mapId = e.getMapSheetNum();
      d.input1 = e.getCompareYyyy();
      d.input2 = e.getTargetYyyy();

      d.cdProb = e.getCdProb();

      d.beforeClass = e.getClassBeforeCd();
      d.beforeProbability = e.getClassBeforeProb();

      d.afterClass = e.getClassAfterCd();
      d.afterProbability = e.getClassAfterProb();

      d.geometry = e.getGeom();
      d.area = e.getArea();

      return d;
    }
  }

  @Setter
  @Getter
  @AllArgsConstructor
  @NoArgsConstructor
  public static class InferenceCntDto {

    @Schema(description = "추론 결과(inference_results)를 기준으로 신규 목록 저장 터이터 건수", example = "120")
    int sheetAnalDataCnt;

    @Schema(description = "추론 결과(inference_results)를 기준으로 신규 저장 데이터 건수", example = "120")
    int inferenceCnt;

    @Schema(description = "추론 결과(inference_results)를 기준으로 신규 저장 Geom 데이터 건수", example = "120")
    int inferenceGeomCnt;
  }

  @Setter
  @Getter
  @AllArgsConstructor
  @NoArgsConstructor
  public static class FileCntDto {

    @Schema(description = "shp 파일 생성 수 (덮어쓰기 포함)", example = "120")
    private int shp;

    @Schema(description = "shx 파일 생성 수 (덮어쓰기 포함)", example = "120")
    private int shx;

    @Schema(description = "dbf 파일 생성 수 (덮어쓰기 포함)", example = "120")
    private int dbf;

    @Schema(description = "prj 파일 생성 수 (덮어쓰기 포함)", example = "120")
    private int prj;

    @Schema(description = "geojson 파일 생성 수 (덮어쓰기 포함)", example = "120")
    private int geojson;
  }
}
