package com.its.op.dto.its.vms;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.its.op.entity.its.vms.TbVmsIfscTraf;
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;

/**
 * VMS_소통정보 DTO Class
 */
@Data
@Builder
@ApiModel("TbVmsIfscTrafDto(VMS_소통정보)")
public class TbVmsIfscTrafDto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
    @JsonProperty("vms_ifsc_id")
    private Long vmsIfscId;

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

    @ApiModelProperty("속도")  // Y NUMBER(3)
    @JsonProperty("sped")
    private Integer sped;

    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
    @JsonProperty("cmtr_grad_cd")
    private String cmtrGradCd;

    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
    @JsonProperty("trvl_hh")
    private Integer trvlHh;

    // Code Description Field
    @ApiModelProperty("VMS 정보제공구간 명")  // Y VARCHAR(60)
    @JsonProperty("vms_ifsc_nm")
    private String vmsIfscNm;

    @ApiModelProperty("표출 시작 노드 명")  // Y VARCHAR(30)
    @JsonProperty("dspl_strt_node_nm")
    private String dsplStrtNodeNm;

    @ApiModelProperty("표출 종료 노드 명")  // Y VARCHAR(30)
    @JsonProperty("dspl_end_node_nm")
    private String dsplEndNodeNm;

    @ApiModelProperty("소통 등급 코드 설명")
    @JsonProperty("cmtr_grad_desc")    // CMTR_GRAD_CD
    private String cmtrGradDesc;

    @ApiModelProperty("결측여부")
    @JsonProperty("miss_yn")
    private String missYn;

    @ApiModel("TbVmsCmtrInfrUpdReq(VMS_소통정보 정보변경)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor//(access = AccessLevel.PROTECTED)
    public static class TbVmsCmtrInfrUpdReq {

        @ApiModelProperty("VMS 정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
        @JsonProperty("vms_ifsc_id")
        @PositiveOrZero
        private Long vmsIfscId;

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

        @ApiModelProperty("속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
        @JsonProperty("sped")
        @PositiveOrZero
        private Integer sped;

        @ApiModelProperty("소통 등급 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("cmtr_grad_cd")
        @Size(min=1, max=7)
        private String cmtrGradCd;

        @ApiModelProperty("통행 시간, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
        @JsonProperty("trvl_hh")
        @PositiveOrZero
        private Integer trvlHh;

        @Builder
        public TbVmsCmtrInfrUpdReq(Long vms_ifsc_id, String prcn_dt, Integer sped, String cmtr_grad_cd, Integer trvl_hh) {
            this.vmsIfscId = vms_ifsc_id;
            this.prcnDt = prcn_dt;
            this.sped = sped;
            this.cmtrGradCd = cmtr_grad_cd;
            this.trvlHh = trvl_hh;
        }

        public TbVmsIfscTraf toEntity() {
            return TbVmsIfscTraf.builder()
                    .vmsIfscId(this.vmsIfscId)
                    .prcnDt(this.prcnDt)
                    .sped(this.sped)
                    .cmtrGradCd(this.cmtrGradCd)
                    .trvlHh(this.trvlHh)
                    .build();
        }

    }

}
