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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import incheon.cmm.g2f.layer.domain.LayerType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

@Getter
@Setter
public abstract class AbstractAnalysisRequestDTO {

    @Schema(description = "레이어 이름")
    @NotEmpty(message = "레이어 이름은 필수입니다.")
    private String layerName;

    @Schema(description = "레이어 설명")
    private String layerExpln;

    @Schema(description = "레이어 그룹 코드", example = "ETC")
    private String layerGroupCode = "ETC";

    @Schema(description = "소스 레이어 ID")
    @NotNull(message = "소스 레이어 ID는 필수입니다.")
    private Integer sourceLyrId;

    @Schema(description = "소스 레이어 유형 (TASK: 업무레이어, USER: 사용자레이어)", example = "TASK")
    @NotNull(message = "소스 레이어 유형은 필수입니다.")
    private LayerType sourceLayerType;

    private static final ObjectMapper mapper = new ObjectMapper();

    public String toJsonString() {
        try {
            return mapper.writeValueAsString(jsonPart());
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 변환 실패", e);
        }
    }

    protected abstract Object jsonPart();
}
