package incheon.ags.ias.comCd.web.dto;

import incheon.ags.ias.comCd.vo.ComCdVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
 * 공통코드 API 요청 DTO
 */
@Getter
@Setter
@Schema(description = "공통코드 요청 DTO")
public class ComCdRequestDTO {

    @Schema(description = "코드 (영문 대문자)", example = "MAIN", required = true)
    @NotBlank(message = "코드는 필수입니다")
    @Size(max = 20, message = "코드는 최대 20자입니다")
    private String cd;

    @Schema(description = "그룹코드", example = "MENU_TYPE", required = true)
    @NotBlank(message = "그룹코드는 필수입니다")
    @Size(max = 20, message = "그룹코드는 최대 20자입니다")
    private String groupCd;

    @Schema(description = "코드명", example = "메인메뉴", required = true)
    @NotBlank(message = "코드명은 필수입니다")
    @Size(max = 100, message = "코드명은 최대 100자입니다")
    private String cdNm;

    @Schema(description = "코드설명", example = "메인 메뉴 타입")
    @Size(max = 4000, message = "코드설명은 최대 4000자입니다")
    private String cdExpln;

    @Schema(description = "코드정렬순서", example = "1")
    private Integer cdSortSeq;

    @Schema(description = "상위코드 (계층구조)", example = "PARENT_CD")
    @Size(max = 20, message = "상위코드는 최대 20자입니다")
    private String upCd;

    @Schema(description = "사용여부", example = "Y", required = true, allowableValues = {"Y", "N"})
    @NotBlank(message = "사용여부는 필수입니다")
    @Pattern(regexp = "^[YN]$", message = "사용여부는 Y 또는 N만 입력 가능합니다")
    private String useYn;

    /**
     * DTO를 VO로 변환
     */
    public ComCdVO toEntity() {
        ComCdVO vo = new ComCdVO();
        vo.setCd(this.cd);
        vo.setGroupCd(this.groupCd);
        vo.setCdNm(this.cdNm);
        vo.setCdExpln(this.cdExpln);
        vo.setCdSortSeq(this.cdSortSeq);
        vo.setUpCd(this.upCd);
        vo.setUseYn(this.useYn);
        return vo;
    }
}
