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

import com.its.api.its.model.entity.link.TbLinkParaDetl;
import lombok.*;

import java.io.Serializable;

public class LinkParaDetlDto implements Serializable {

    @Getter
    public static class LinkParaDetlInfo {
        private final Long    LINK_ID;                    //	N	NUMBER(10)	N			링크ID
        private final Integer FLTR_MIN_TFVL;              //	N	NUMBER(6)	Y	0		필터링 최소 교통량
        private final Integer FLTR_MAX_TFVL;              //	N	NUMBER(6)	Y	0		필터링 최대 교통량
        private final Integer FLTR_LWST_SPED;             //	N	NUMBER(3)	Y	0		필터링 최저 속도
        private final Integer FLTR_HGHS_SPED;             //	N	NUMBER(3)	Y	0		필터링 최고 속도
        private final Double  ADJS_WGHT_AVRG_PRE_1CYCL;   //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 1주기
        private final Double  ADJS_WGHT_AVRG_PRE_2CYCL;   //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 2주기
        private final Double  ADJS_WGHT_AVRG_PRE_3CYCL;   //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 3주기
        private final String  ADJS_15M_PTRN_APLY_YN;      //	N	CHAR(1)	    Y	'N'		보정 15분 패턴 적용 여부
        private final Integer ADJS_SHTR_MISS_DECS_CYCL;   //	N	NUMBER(2)	Y			보정 단기 결측 판단 주기
        private final Double  SMTH_LWST_SPED_FCTR;        //	N	NUMBER(3,2)	Y	0		평활화 최저 속도 계수
        private final Double  SMTH_HGHS_SPED_FCTR;        //	N	NUMBER(3,2)	Y	0		평활화 최고 속도 계수
        private final Double  SMTH_WGHT_AVRG_PRST;        //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 현재
        private final Double  SMTH_WGHT_AVRG_PRE_1CYCL;   //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 이전 1주기
        private final Double  SMTH_WGHT_AVRG_PRE_2CYCL;   //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 이전 2주기

        public LinkParaDetlInfo(TbLinkParaDetl entity) {
            this.LINK_ID                  = entity.getLINK_ID();
            this.FLTR_MIN_TFVL            = entity.getFLTR_MIN_TFVL();
            this.FLTR_MAX_TFVL            = entity.getFLTR_MAX_TFVL();
            this.FLTR_LWST_SPED           = entity.getFLTR_LWST_SPED();
            this.FLTR_HGHS_SPED           = entity.getFLTR_HGHS_SPED();
            this.ADJS_WGHT_AVRG_PRE_1CYCL = entity.getADJS_WGHT_AVRG_PRE_1CYCL();
            this.ADJS_WGHT_AVRG_PRE_2CYCL = entity.getADJS_WGHT_AVRG_PRE_2CYCL();
            this.ADJS_WGHT_AVRG_PRE_3CYCL = entity.getADJS_WGHT_AVRG_PRE_3CYCL();
            this.ADJS_15M_PTRN_APLY_YN    = entity.getADJS_15M_PTRN_APLY_YN();
            this.ADJS_SHTR_MISS_DECS_CYCL = entity.getADJS_SHTR_MISS_DECS_CYCL();
            this.SMTH_LWST_SPED_FCTR      = entity.getSMTH_LWST_SPED_FCTR();
            this.SMTH_HGHS_SPED_FCTR      = entity.getSMTH_HGHS_SPED_FCTR();
            this.SMTH_WGHT_AVRG_PRST      = entity.getSMTH_WGHT_AVRG_PRST();
            this.SMTH_WGHT_AVRG_PRE_1CYCL = entity.getSMTH_WGHT_AVRG_PRE_1CYCL();
            this.SMTH_WGHT_AVRG_PRE_2CYCL = entity.getSMTH_WGHT_AVRG_PRE_2CYCL();

        }
    }

    @Getter
    @Setter
    @ToString
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public static class LinkParaDetlUpdateReq {

        private Integer FLTR_MIN_TFVL;              //	N	NUMBER(6)	Y	0		필터링 최소 교통량
        private Integer FLTR_MAX_TFVL;              //	N	NUMBER(6)	Y	0		필터링 최대 교통량
        private Integer FLTR_LWST_SPED;             //	N	NUMBER(3)	Y	0		필터링 최저 속도
        private Integer FLTR_HGHS_SPED;             //	N	NUMBER(3)	Y	0		필터링 최고 속도
        private Double  ADJS_WGHT_AVRG_PRE_1CYCL;   //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 1주기
        private Double  ADJS_WGHT_AVRG_PRE_2CYCL;   //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 2주기
        private Double  ADJS_WGHT_AVRG_PRE_3CYCL;   //	N	NUMBER(5,2)	Y	0		보정 가중치 평균 이전 3주기
        private String  ADJS_15M_PTRN_APLY_YN;      //	N	CHAR(1)	    Y	'N'		보정 15분 패턴 적용 여부
        private Integer ADJS_SHTR_MISS_DECS_CYCL;   //	N	NUMBER(2)	Y			보정 단기 결측 판단 주기
        private Double  SMTH_LWST_SPED_FCTR;        //	N	NUMBER(3,2)	Y	0		평활화 최저 속도 계수
        private Double  SMTH_HGHS_SPED_FCTR;        //	N	NUMBER(3,2)	Y	0		평활화 최고 속도 계수
        private Double  SMTH_WGHT_AVRG_PRST;        //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 현재
        private Double  SMTH_WGHT_AVRG_PRE_1CYCL;   //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 이전 1주기
        private Double  SMTH_WGHT_AVRG_PRE_2CYCL;   //	N	NUMBER(5,2)	Y	0		평활화 가중치 평균 이전 2주기

        @Builder
        public LinkParaDetlUpdateReq(Integer FLTR_MIN_TFVL, Integer FLTR_MAX_TFVL, Integer FLTR_LWST_SPED, Integer FLTR_HGHS_SPED, Double ADJS_WGHT_AVRG_PRE_1CYCL, Double ADJS_WGHT_AVRG_PRE_2CYCL, Double ADJS_WGHT_AVRG_PRE_3CYCL, String ADJS_15M_PTRN_APLY_YN, Integer ADJS_SHTR_MISS_DECS_CYCL, Double SMTH_LWST_SPED_FCTR, Double SMTH_HGHS_SPED_FCTR, Double SMTH_WGHT_AVRG_PRST, Double SMTH_WGHT_AVRG_PRE_1CYCL, Double SMTH_WGHT_AVRG_PRE_2CYCL) {
            this.FLTR_MIN_TFVL = FLTR_MIN_TFVL;
            this.FLTR_MAX_TFVL = FLTR_MAX_TFVL;
            this.FLTR_LWST_SPED = FLTR_LWST_SPED;
            this.FLTR_HGHS_SPED = FLTR_HGHS_SPED;
            this.ADJS_WGHT_AVRG_PRE_1CYCL = ADJS_WGHT_AVRG_PRE_1CYCL;
            this.ADJS_WGHT_AVRG_PRE_2CYCL = ADJS_WGHT_AVRG_PRE_2CYCL;
            this.ADJS_WGHT_AVRG_PRE_3CYCL = ADJS_WGHT_AVRG_PRE_3CYCL;
            this.ADJS_15M_PTRN_APLY_YN = ADJS_15M_PTRN_APLY_YN;
            this.ADJS_SHTR_MISS_DECS_CYCL = ADJS_SHTR_MISS_DECS_CYCL;
            this.SMTH_LWST_SPED_FCTR = SMTH_LWST_SPED_FCTR;
            this.SMTH_HGHS_SPED_FCTR = SMTH_HGHS_SPED_FCTR;
            this.SMTH_WGHT_AVRG_PRST = SMTH_WGHT_AVRG_PRST;
            this.SMTH_WGHT_AVRG_PRE_1CYCL = SMTH_WGHT_AVRG_PRE_1CYCL;
            this.SMTH_WGHT_AVRG_PRE_2CYCL = SMTH_WGHT_AVRG_PRE_2CYCL;
        }
    }

}
