package com.its.op.dto.its.vds;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.its.op.global.CodeManager;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;

/**
 * VMS 제어기 상태 현재 DTO Class
 */
@Data
@Builder
@ApiModel("TbVdsCtlrSttsDto(VDS 제어기 상태 현재)")
public class TbVdsCtlrSttsDto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("VDS 제어기 번호")  // N NUMBER(10)
    @JsonProperty("vds_ctlr_nmbr")
    private Long vdsCtlrNmbr;

    @ApiModelProperty("갱신 일시")  // Y VARCHAR2(14)
    @JsonProperty("updt_dt")
    private String updtDt;

    @ApiModelProperty("통신 상태 코드('CMS')")  // Y VARCHAR2(7)
    @JsonProperty("cmnc_stts_cd")
    private String cmncSttsCd;

    @ApiModelProperty("함체 문 상태 코드('CDS')-앞문/뒷문상태가 모두닫힌경우 닫힘")  // Y VARCHAR2(7)
    @JsonProperty("cbox_door_stts_cd")
    private String cboxDoorSttsCd;

    @ApiModelProperty("앞문 상태 코드('CDS')")  // Y VARCHAR2(7)
    @JsonProperty("front_door_stts_cd")
    private String frontDoorSttsCd;

    @ApiModelProperty("뒷문 상태 코드('CDS')")  // Y VARCHAR2(7)
    @JsonProperty("back_door_stts_cd")
    private String backDoorSttsCd;

    @ApiModelProperty("팬 상태 코드('PAS')")  // Y VARCHAR2(7)
    @JsonProperty("fan_stts_cd")
    private String fanSttsCd;

    @ApiModelProperty("히터 상태 코드('HTS')")  // Y VARCHAR2(7)
    @JsonProperty("hetr_stts_cd")
    private String hetrSttsCd;

    @ApiModelProperty("함체 온도")  // Y NUMBER(5)
    @JsonProperty("cbox_tmpr")
    private Integer cboxTmpr;

    @ApiModelProperty("입력 전압")  // Y NUMBER(3)
    @JsonProperty("inpt_volt")
    private Integer inptVolt;

    @ApiModelProperty("출력 전압")  // Y NUMBER(3)
    @JsonProperty("prnt_volt")
    private Integer prntVolt;

    @ApiModelProperty("출력 전원 상태 코드")  // Y VARCHAR2(7)
    @JsonProperty("prnt_pwer_stts_cd")
    private String prntPwerSttsCd;

    @ApiModelProperty("Video Input 여부('VDI')")  // Y VARCHAR2(7)
    @JsonProperty("video_input")
    private String videoInput;

    // Code Description Field
    @ApiModelProperty("통신 상태 코드('CMS') 설명")
    @JsonProperty("cmnc_stts_desc")    // CMNC_STTS_CD
    private String cmncSttsDesc;

    @ApiModelProperty("함체 문 상태 코드('CDS')-앞문/뒷문상태가 모두닫힌경우 닫힘 설명")
    @JsonProperty("cbox_door_stts_desc")    // CBOX_DOOR_STTS_CD
    private String cboxDoorSttsDesc;

    @ApiModelProperty("앞문 상태 코드('CDS') 설명")
    @JsonProperty("front_door_stts_desc")    // FRONT_DOOR_STTS_CD
    private String frontDoorSttsDesc;

    @ApiModelProperty("뒷문 상태 코드('CDS') 설명")
    @JsonProperty("back_door_stts_desc")    // BACK_DOOR_STTS_CD
    private String backDoorSttsDesc;

    @ApiModelProperty("팬 상태 코드('PAS') 설명")
    @JsonProperty("fan_stts_desc")    // FAN_STTS_CD
    private String fanSttsDesc;

    @ApiModelProperty("히터 상태 코드('HTS') 설명")
    @JsonProperty("hetr_stts_desc")    // HETR_STTS_CD
    private String hetrSttsDesc;

    @ApiModelProperty("출력 전원 상태 코드 설명")
    @JsonProperty("prnt_pwer_stts_desc")    // PRNT_PWER_STTS_CD
    private String prntPwerSttsDesc;

    // VDS Controller Information
    @ApiModelProperty("VDS 제어기 ID")
    @JsonProperty("vds_ctlr_id")
    private String vdsCtlrId;
    @ApiModelProperty("VDS 제어기 명")
    @JsonProperty("vds_nm")
    private String vdsNm;
    @ApiModelProperty("유효 여부")  // Y CHAR(1)
    @JsonProperty("vald_yn")
    private String valdYn;

    @ApiModelProperty("상태정보결측설명")
    @JsonProperty("miss_stts_yn")
    private String missSttsYn;

    @ApiModelProperty("수집건수")
    @JsonProperty("coll_cnt")
    private Integer collCnt;

    @ApiModelProperty("수집 상태 코드 설명")
    @JsonProperty("coll_stts_desc")    // HETR_STTS_CD
    private String collSttsDesc;

    /**
     * 상태정보를 먼저 업데이트 한 다음 수집수량을 업데이트 하면 수집상태 코드도 함께 업데이트 된다.
     * @param collCnt
     */
    public void setCollectInfo(Integer collCnt) {
        this.collCnt = collCnt;
        if (CodeManager.CMNC_STTS_NORMAL.equals(this.cmncSttsCd)) {
            if (collCnt > 0) {
                this.collSttsDesc = "정상";
            } else {
                this.collSttsDesc = "이상";
            }
        } else {
            this.collSttsDesc = CodeManager.STTS_UNKNOWN;
        }
    }
}
