package com.its.op.dto.its.code;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.its.op.entity.its.code.TbCmmnClsfCd;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.io.Serializable;

/**
 * 공통 분류 코드 DTO Class
 */
@Data
@Builder
@ApiModel("TbCmmnClsfCdDto(공통 분류 코드)")
public class TbCmmnClsfCdDto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("공통 분류 코드")  // N VARCHAR(5)
    @JsonProperty("cmmn_clsf_cd")
    private String cmmnClsfCd;

    @ApiModelProperty("메시지 유형 코드")  // Y VARCHAR(7)
    @JsonProperty("msg_type_cd")
    private String msgTypeCd;

    @ApiModelProperty("공통 분류 한글 명")  // Y VARCHAR(100)
    @JsonProperty("cmmn_clsf_kor_nm")
    private String cmmnClsfKorNm;

    @ApiModelProperty("공통 분류 영문 명")  // Y VARCHAR(100)
    @JsonProperty("cmmn_clsf_engl_nm")
    private String cmmnClsfEnglNm;

    @ApiModelProperty("사용 시스템 코드")  // Y VARCHAR(7)
    @JsonProperty("use_syst_cd")
    private String useSystCd;

    @ApiModelProperty("비고")  // Y VARCHAR(600)
    @JsonProperty("rmrk")
    private String rmrk;

    @ApiModelProperty("사용 여부")  // Y CHAR(1)
    @JsonProperty("use_yn")
    private String useYn;

    // Code Description Field
    /*@ApiModelProperty("공통 분류 코드 설명")
    @JsonProperty("cmmn_clsf_desc")    // CMMN_CLSF_CD
    private String cmmnClsfDesc;

    @ApiModelProperty("메시지 유형 코드 설명")
    @JsonProperty("msg_type_desc")    // MSG_TYPE_CD
    private String msgTypeDesc;

    @ApiModelProperty("사용 시스템 코드 설명")
    @JsonProperty("use_syst_desc")    // USE_SYST_CD
    private String useSystDesc;

    @ApiModelProperty("사용 여부 설명")
    @JsonProperty("use_desc")    // USE_YN
    private String useDesc;*/

    @ApiModel("TbCmmnClsfCdUpdReq(공통 분류 코드 정보변경)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor//(access = AccessLevel.PROTECTED)
    public static class TbCmmnClsfCdUpdReq {

        @ApiModelProperty("공통 분류 코드, Nullable = N, VARCHAR(5)")  // N VARCHAR(5)
        @JsonProperty("cmmn_clsf_cd")
        @Size(min=1, max=5)
        private String cmmnClsfCd;

        @ApiModelProperty("메시지 유형 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("msg_type_cd")
        @Size(min=1, max=7)
        private String msgTypeCd;

        @ApiModelProperty("공통 분류 한글 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
        @JsonProperty("cmmn_clsf_kor_nm")
        @Size(min=1, max=100)
        private String cmmnClsfKorNm;

        @ApiModelProperty("공통 분류 영문 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
        @JsonProperty("cmmn_clsf_engl_nm")
        @Size(min=1, max=100)
        private String cmmnClsfEnglNm;

        @ApiModelProperty("사용 시스템 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("use_syst_cd")
        @Size(min=1, max=7)
        private String useSystCd;

        @ApiModelProperty("비고, Nullable = Y, VARCHAR(600)")  // Y VARCHAR(600)
        @JsonProperty("rmrk")
        @Size(min=1, max=600)
        private String rmrk;

        @ApiModelProperty("사용 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
        @JsonProperty("use_yn")
        @Size(min=1, max=1)
        @Pattern(regexp = "[YN]")
        private String useYn;

        @Builder
        public TbCmmnClsfCdUpdReq(String cmmn_clsf_cd, String msg_type_cd, String cmmn_clsf_kor_nm, String cmmn_clsf_engl_nm, String use_syst_cd, String rmrk, String use_yn) {
            this.cmmnClsfCd = cmmn_clsf_cd;
            this.msgTypeCd = msg_type_cd;
            this.cmmnClsfKorNm = cmmn_clsf_kor_nm;
            this.cmmnClsfEnglNm = cmmn_clsf_engl_nm;
            this.useSystCd = use_syst_cd;
            this.rmrk = rmrk;
            this.useYn = use_yn;
        }

        public TbCmmnClsfCd toEntity() {
            return TbCmmnClsfCd.builder()
                    .cmmnClsfCd(this.cmmnClsfCd)
                    .msgTypeCd(this.msgTypeCd)
                    .cmmnClsfKorNm(this.cmmnClsfKorNm)
                    .cmmnClsfEnglNm(this.cmmnClsfEnglNm)
                    .useSystCd(this.useSystCd)
                    .rmrk(this.rmrk)
                    .useYn(this.useYn)
                    .build();
        }

    }

}
