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

import com.fasterxml.jackson.annotation.JsonProperty;
import com.its.op.entity.its.code.TbCmmnCd;
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("TbCmmnCdDto(공통 코드)")
public class TbCmmnCdDto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("공통 코드")  // N VARCHAR(7)
    @JsonProperty("cmmn_cd")
    private String cmmnCd;

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

    @ApiModelProperty("공통 코드 한글 명")  // Y VARCHAR(100)
    @JsonProperty("cmmn_cd_kor_nm")
    private String cmmnCdKorNm;

    @ApiModelProperty("공통 코드 영문 명")  // Y VARCHAR(100)
    @JsonProperty("cmmn_cd_engl_nm")
    private String cmmnCdEnglNm;

    @ApiModelProperty("공통 코드 약어")  // Y VARCHAR(40)
    @JsonProperty("cmmn_cd_abbr")
    private String cmmnCdAbbr;

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

    @ApiModelProperty("속성1")  // Y VARCHAR(60)
    @JsonProperty("atrb1")
    private String atrb1;

    @ApiModelProperty("속성2")  // Y VARCHAR(60)
    @JsonProperty("atrb2")
    private String atrb2;

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

    // Code Description Field
    @ApiModelProperty("공통 코드 설명")
    @JsonProperty("cmmn_desc")    // CMMN_CD
    private String cmmnDesc;

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

    @ApiModelProperty("공통 코드 한글 명 설명")
    @JsonProperty("cmmn_desc_kor_nm")    // CMMN_CD_KOR_NM
    private String cmmnDescKorNm;

    @ApiModelProperty("공통 코드 영문 명 설명")
    @JsonProperty("cmmn_desc_engl_nm")    // CMMN_CD_ENGL_NM
    private String cmmnDescEnglNm;

    @ApiModelProperty("공통 코드 약어 설명")
    @JsonProperty("cmmn_desc_abbr")    // CMMN_CD_ABBR
    private String cmmnDescAbbr;

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

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

        @ApiModelProperty("공통 코드, Nullable = N, VARCHAR(7)")  // N VARCHAR(7)
        @JsonProperty("cmmn_cd")
        @Size(min=1, max=7)
        private String cmmnCd;

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

        @ApiModelProperty("공통 코드 한글 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
        @JsonProperty("cmmn_cd_kor_nm")
        @Size(min=1, max=100)
        private String cmmnCdKorNm;

        @ApiModelProperty("공통 코드 영문 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
        @JsonProperty("cmmn_cd_engl_nm")
        @Size(min=1, max=100)
        private String cmmnCdEnglNm;

        @ApiModelProperty("공통 코드 약어, Nullable = Y, VARCHAR(40)")  // Y VARCHAR(40)
        @JsonProperty("cmmn_cd_abbr")
        @Size(min=1, max=40)
        private String cmmnCdAbbr;

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

        @ApiModelProperty("속성1, Nullable = Y, VARCHAR(60)")  // Y VARCHAR(60)
        @JsonProperty("atrb1")
        @Size(min=1, max=60)
        private String atrb1;

        @ApiModelProperty("속성2, Nullable = Y, VARCHAR(60)")  // Y VARCHAR(60)
        @JsonProperty("atrb2")
        @Size(min=1, max=60)
        private String atrb2;

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

        @Builder
        public TbCmmnCdUpdReq(String cmmn_cd, String cmmn_clsf_cd, String cmmn_cd_kor_nm, String cmmn_cd_engl_nm, String cmmn_cd_abbr, String rmrk, String atrb1, String atrb2, String use_yn) {
            this.cmmnCd = cmmn_cd;
            this.cmmnClsfCd = cmmn_clsf_cd;
            this.cmmnCdKorNm = cmmn_cd_kor_nm;
            this.cmmnCdEnglNm = cmmn_cd_engl_nm;
            this.cmmnCdAbbr = cmmn_cd_abbr;
            this.rmrk = rmrk;
            this.atrb1 = atrb1;
            this.atrb2 = atrb2;
            this.useYn = use_yn;
        }

        public TbCmmnCd toEntity() {
            return TbCmmnCd.builder()
                    .cmmnCd(this.cmmnCd)
                    .cmmnClsfCd(this.cmmnClsfCd)
                    .cmmnCdKorNm(this.cmmnCdKorNm)
                    .cmmnCdEnglNm(this.cmmnCdEnglNm)
                    .cmmnCdAbbr(this.cmmnCdAbbr)
                    .rmrk(this.rmrk)
                    .atrb1(this.atrb1)
                    .atrb2(this.atrb2)
                    .useYn(this.useYn)
                    .build();
        }

    }

}
