package com.its.op.dto.its.scrs;

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

import javax.validation.constraints.PositiveOrZero;
import java.io.Serializable;

/**
 * 특수 일 시각 제어 DTO Class
 */
@Data
@Builder
@ApiModel("TbScSpclDdHmsCntlDto(특수 일 시각 제어)")
public class TbScSpclDdHmsCntlDto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("교차로 그룹")  // N NUMBER(3)
    @JsonProperty("ixr_grop")
    private Integer ixrGrop;

    @ApiModelProperty("특수 일 일련번호")  // N NUMBER(2)
    @JsonProperty("spcl_dd_seq")
    private Integer spclDdSeq;

    @ApiModelProperty("특수 일 월")  // Y NUMBER(2)
    @JsonProperty("spcl_dd_mn")
    private Integer spclDdMn;

    @ApiModelProperty("특수 일 일")  // Y NUMBER(2)
    @JsonProperty("spcl_dd_dd")
    private Integer spclDdDd;

    @ApiModelProperty("시각 계획 번호")  // Y NUMBER(2)
    @JsonProperty("hms_plan_nmbr")
    private Integer hmsPlanNmbr;

    @ApiModelProperty("시간 계획 번호")  // Y NUMBER(2)
    @JsonProperty("hh_plan_nmbr")
    private Integer hhPlanNmbr;

    // Code Description Field
    @ApiModel("TbScSpclDdHmsCntlUpdReq(특수 일 시각 제어 정보변경)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor//(access = AccessLevel.PROTECTED)
    public static class TbScSpclDdHmsCntlUpdReq {

        @ApiModelProperty("교차로 그룹, Nullable = N, NUMBER(3)")  // N NUMBER(3)
        @JsonProperty("ixr_grop")
        @PositiveOrZero
        private Integer ixrGrop;

        @ApiModelProperty("특수 일 일련번호, Nullable = N, NUMBER(2)")  // N NUMBER(2)
        @JsonProperty("spcl_dd_seq")
        @PositiveOrZero
        private Integer spclDdSeq;

        @ApiModelProperty("특수 일 월, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("spcl_dd_mn")
        @PositiveOrZero
        private Integer spclDdMn;

        @ApiModelProperty("특수 일 일, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("spcl_dd_dd")
        @PositiveOrZero
        private Integer spclDdDd;

        @ApiModelProperty("시각 계획 번호, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("hms_plan_nmbr")
        @PositiveOrZero
        private Integer hmsPlanNmbr;

        @ApiModelProperty("시간 계획 번호, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("hh_plan_nmbr")
        @PositiveOrZero
        private Integer hhPlanNmbr;

        @Builder
        public TbScSpclDdHmsCntlUpdReq(Integer ixr_grop, Integer spcl_dd_seq, Integer spcl_dd_mn, Integer spcl_dd_dd, Integer hms_plan_nmbr, Integer hh_plan_nmbr) {
            this.ixrGrop = ixr_grop;
            this.spclDdSeq = spcl_dd_seq;
            this.spclDdMn = spcl_dd_mn;
            this.spclDdDd = spcl_dd_dd;
            this.hmsPlanNmbr = hms_plan_nmbr;
            this.hhPlanNmbr = hh_plan_nmbr;
        }

        public TbScSpclDdHmsCntl toEntity() {
            return TbScSpclDdHmsCntl.builder()
                    .ixrGrop(this.ixrGrop)
                    .spclDdSeq(this.spclDdSeq)
                    .spclDdMn(this.spclDdMn)
                    .spclDdDd(this.spclDdDd)
                    .hmsPlanNmbr(this.hmsPlanNmbr)
                    .hhPlanNmbr(this.hhPlanNmbr)
                    .build();
        }

    }

}
