package incheon.ags.mrb.style.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import incheon.com.cmm.ComDefaultVO;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 스타일 정보 VO
 * MapPrime v2.0 Style API 연동용
 */
@lombok.Getter @lombok.Setter
@EqualsAndHashCode(callSuper = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY) // null과 빈 문자열 제외
public class StyleVO extends ComDefaultVO {
    
    /** 스타일 이름 */
    @NotBlank(message = "스타일 이름은 필수입니다")
    @Size(max = 100, message = "스타일 이름은 100자를 초과할 수 없습니다")
    private String styleName;
    
    /** 스타일 제목 */
    @Size(max = 200, message = "스타일 제목은 200자를 초과할 수 없습니다")
    private String title;
    
    /** 스타일 설명 */
    @Size(max = 1000, message = "스타일 설명은 1000자를 초과할 수 없습니다")  
    private String description;
    
    /** SLD 내용 (XML) */
    private String sldContent;
    
    /** 워크스페이스 이름 */
    private String workspace;
    
    /** 스타일 타입 (point, line, polygon, raster) */
    private String styleType;
    
    /** 사용 여부 */
    private String useYn;
    
    /** 기본 스타일 여부 */
    private String defaultYn;
    
    /** 생성일시 */
    private String createdAt;
    
    /** 수정일시 */
    private String updatedAt;
    
    /** 생성자 */
    private String createdBy;
    
    /** 수정자 */
    private String updatedBy;

    /** 스타일 미리보기 URL */
    private String previewUrl;
    
    /** 레이어명 (스타일 적용 대상) */
    private String layerName;
    
    /** 스타일 버전 */
    private String version;
    
    /** 추가 메타데이터 (JSON 형태) */
    private String metadata;

    /**
     * SLD 내용 존재 여부 확인
     * @return SLD 내용이 있으면 true
     */
    public boolean hasSldContent() {
        return sldContent != null && !sldContent.trim().isEmpty();
    }
    
    /**
     * 스타일 이름 반환 (API 호환성을 위한 getName 메서드)
     * @return 스타일 이름
     */
    public String getName() {
        return styleName;
    }
}