package incheon.product.geoview2d.layer.vo;

import java.io.Serial;
import java.util.ArrayList;
import java.util.List;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import incheon.com.cmm.ComDefaultVO;
import incheon.product.geoview2d.layer.domain.LayerType;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;

/**
 * 레이어 편집 요청 VO.
 */
@Getter
@Setter
@NoArgsConstructor
public class LayerEditRequestVO extends ComDefaultVO {

    @Serial
    private static final long serialVersionUID = 1L;

    @NotBlank(message = "레이어 ID는 필수입니다.")
    private String layerId;

    @NotNull(message = "레이어 유형은 필수입니다.")
    private LayerType layerType;

    @NotNull(message = "변경사항은 필수입니다.")
    @Valid
    private ChangesVO changes;

    @Getter
    @Setter
    @NoArgsConstructor
    public static class ChangesVO {
        @Valid
        private List<FeatureVO> added = new ArrayList<>();

        @Valid
        private List<FeatureVO> modified = new ArrayList<>();

        private List<Integer> deleted = new ArrayList<>();

        public void setAdded(List<FeatureVO> added) {
            this.added = added != null ? added : new ArrayList<>();
        }

        public void setModified(List<FeatureVO> modified) {
            this.modified = modified != null ? modified : new ArrayList<>();
        }

        public void setDeleted(List<Integer> deleted) {
            this.deleted = deleted != null ? deleted : new ArrayList<>();
        }
    }
}
