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

import incheon.ags.ias.comCd.vo.ComGroupCdVO;
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 ComGroupCdRequestDTO {

    @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 groupCdNm;

    @Schema(description = "그룹코드설명", example = "메뉴 유형 구분 코드")
    @Size(max = 4000, message = "그룹코드설명은 최대 4000자입니다")
    private String groupCdExpln;

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

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

    /**
     * DTO를 VO로 변환
     */
    public ComGroupCdVO toEntity() {
        ComGroupCdVO vo = new ComGroupCdVO();
        vo.setGroupCd(this.groupCd);
        vo.setGroupCdNm(this.groupCdNm);
        vo.setGroupCdExpln(this.groupCdExpln);
        vo.setUpGroupCd(this.upGroupCd);
        vo.setUseYn(this.useYn);
        return vo;
    }
}
