package com.its.api.its.model.dto.vms;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import javax.validation.constraints.PositiveOrZero;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;

/**
 * VMS 심벌 라이브러리 DTO Class
 */
@Data
@Builder
@ApiModel("TbVmsSymbLibIfscVMP1Dto(VMS 심벌 라이브러리 소통정보 배경 이미지 관계)")
public class TbVmsSymbLibIfscVMP1Dto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("심벌라이브러리 번호")  // N NUMBER(4)
    @JsonProperty("symb_lib_nmbr")
    private Integer symbLibNmbr;

    @ApiModelProperty("등록 일시")  // Y VARCHAR(14)
    @JsonProperty("rgst_dt")
    private String rgstDt;

    @JsonIgnore
    //@ApiModelProperty("RED 데이터")  // Y BLOB
    //@JsonProperty("red_data")
    private byte[] redData;

    @JsonIgnore
    //@ApiModelProperty("GREEN 데이터")  // Y BLOB
    //@JsonProperty("green_data")
    private byte[] greenData;

    @ApiModelProperty("심벌 설명")  // Y VARCHAR(200)
    @JsonProperty("symb_expl")
    private String symbExpl;

    @ApiModelProperty("이미지 데이터")  // Y BLOB
    @JsonProperty("imag_data")
    private byte[] imagData;

    @JsonIgnore
    //@ApiModelProperty("VMS 유형 코드")  // Y VARCHAR(7)
    //@JsonProperty("vms_type_cd")
    private String vmsTypeCd;

    @JsonIgnore
    //@ApiModelProperty("심벌 이미지 유형")  // Y VARCHAR(7)
    //@JsonProperty("symb_imag_type")
    private String symbImagType;

    @JsonIgnore
    //@ApiModelProperty("심벌 파일 명")  // Y VARCHAR(40)
    //@JsonProperty("symb_file_nm")
    private String symbFileNm;

    // Code Description Field
    //@JsonIgnore
    //@ApiModelProperty("VMS 유형 코드 설명")
    //@JsonProperty("vms_type_desc")    // VMS_TYPE_CD
    //private String vmsTypeDesc;

    // 소통정보 이미지 셀정보(여러개 존재)
    List<TbVmsSymbIfscDto> cells;

    public static TbVmsSymbLibIfscVMP1Dto toDto(TbVmsSymbLibDto lib, List<TbVmsSymbIfscDto> cells) {
        TbVmsSymbLibIfscVMP1Dto dto = TbVmsSymbLibIfscVMP1Dto.builder()
                .symbLibNmbr(lib.getSymbLibNmbr())
                .rgstDt(lib.getRgstDt())
                .redData(lib.getRedData())
                .greenData(lib.getGreenData())
                .symbExpl(lib.getSymbExpl())
                .imagData(lib.getImagData())
                .vmsTypeCd(lib.getVmsTypeCd())
                .symbImagType(lib.getSymbImagType())
                .symbFileNm(lib.getSymbFileNm())
                .cells(cells)
                .build();

        return dto;
    }

    @ApiModel("TbVmsSymbLibIfscVMP1UpdReq(VMS 심벌 라이브러리 소통정보 배경 이미지 정보변경)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public static class TbVmsSymbLibIfscVMP1UpdReq {

        @ApiModelProperty("심벌라이브러리 번호, Nullable = N, NUMBER(4)")  // N NUMBER(4)
        @JsonProperty("symb_lib_nmbr")
        @PositiveOrZero
        private Integer symbLibNmbr;

        @ApiModelProperty("등록 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
        @JsonProperty("rgst_dt")
        @Size(min=1, max=14)
        private String rgstDt;

        @JsonIgnore
        //@ApiModelProperty("RED 데이터, Nullable = Y, Image Data")  // Y BLOB
        //@JsonProperty("red_data")
        private byte[] redData;

        @JsonIgnore
        //@ApiModelProperty("GREEN 데이터, Nullable = Y, Image Data")  // Y BLOB
        //@JsonProperty("green_data")
        private byte[] greenData;

        @ApiModelProperty("심벌 설명, Nullable = Y, VARCHAR(200)")  // Y VARCHAR(200)
        @JsonProperty("symb_expl")
        @Size(min=1, max=200)
        private String symbExpl;

        @ApiModelProperty("이미지 데이터, Nullable = Y, Image Data")  // Y BLOB
        @JsonProperty("imag_data")
        private byte[] imagData;

        @JsonIgnore
        //@ApiModelProperty("VMS 유형 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        //@JsonProperty("vms_type_cd")
        //@Size(min=1, max=7)
        private String vmsTypeCd;

        @JsonIgnore
        //@ApiModelProperty("심벌 이미지 유형, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        //@JsonProperty("symb_imag_type")
        //@Size(min=1, max=7)
        private String symbImagType;

        @JsonIgnore
        //@ApiModelProperty("심벌 파일 명, Nullable = Y, VARCHAR(40)")  // Y VARCHAR(40)
        //@JsonProperty("symb_file_nm")
        //@Size(min=1, max=40)
        private String symbFileNm;

        // 소통정보 이미지 셀정보(여러개 존재)
        @ApiModelProperty("이미지 셀 설정 정보 목록")
        List<TbVmsSymbIfscDto> cells;

        @Builder
        public TbVmsSymbLibIfscVMP1UpdReq(Integer symb_lib_nmbr, String rgst_dt, byte[] red_data, byte[] green_data, String symb_expl, byte[] imag_data, String vms_type_cd, String symb_imag_type, String symb_file_nm, List<TbVmsSymbIfscDto> cells) {
            this.symbLibNmbr = symb_lib_nmbr;
            this.rgstDt = rgst_dt;
            this.redData = red_data;
            this.greenData = green_data;
            this.symbExpl = symb_expl;
            this.imagData = imag_data;
            this.vmsTypeCd = vms_type_cd;
            this.symbImagType = symb_imag_type;
            this.symbFileNm = symb_file_nm;
            this.cells = cells;
        }

        public TbVmsSymbLibDto.TbVmsSymbLibUpdReq toLibReq() {
            return TbVmsSymbLibDto.TbVmsSymbLibUpdReq.builder()
                    .symb_lib_nmbr(this.symbLibNmbr)
                    .rgst_dt(this.rgstDt)
                    .red_data(this.redData)
                    .green_data(this.greenData)
                    .symb_expl(this.symbExpl)
                    .imag_data(this.imagData)
                    .vms_type_cd(this.vmsTypeCd)
                    .symb_imag_type(this.symbImagType)
                    .symb_file_nm(this.symbFileNm)
                    .build();
        }

    }

}
