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

import com.fasterxml.jackson.annotation.JsonProperty;
import com.its.api.its.model.dto.code.TbCmmnCdDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("PtrnDataDto(패턴데이터 분석 정보)")
public class PtrnDataDto {

    @ApiModelProperty("ID, (LINK_ID, IFSC_ID, ROAD_ID)")
    @JsonProperty("id")
    private String ID;              // ID, (LINK_ID, IFSC_ID, ROAD_ID)
    @ApiModelProperty("구간명")
    @JsonProperty("sect_name")
    private String SECT_NAME;       // 구간명
    @ApiModelProperty("구간길이")
    @JsonProperty("sect_lngt")
    private String SECT_LNGT;       // 구간길이
    @ApiModelProperty("패턴요일")
    @JsonProperty("day_type_cd")
    private String DAY_TYPE_CD;     // 패턴요일
    @ApiModelProperty("패턴시각")
    @JsonProperty("ptrn_hm")
    private String PTRN_HM;         // 패턴시각

    @ApiModelProperty("기준월 속도")
    @JsonProperty("base_sped")
    private int    BASE_SPED;       // 기준월 속도
    @ApiModelProperty("기준월 통행시간")
    @JsonProperty("base_trvl_hh")
    private int    BASE_TRVL_HH;    // 기준월 통행시간
    @ApiModelProperty("비교월 속도")
    @JsonProperty("comp_sped")
    private int    COMP_SPED;       // 비교월 속도
    @ApiModelProperty("비교월 통행시간")
    @JsonProperty("comp_trvl_hh")
    private int    COMP_TRVL_HH;    // 비교월 통행시간
    @ApiModelProperty("속도 차이(기준월-비교월)")
    @JsonProperty("diff_sped")
    private int    DIFF_SPED;       // 속도 차이(기준월-비교월)
    @ApiModelProperty("통행시간 차이(기준월-비교월)")
    @JsonProperty("diff_trvl_hh")
    private int    DIFF_TRVL_HH;    // 통행시간 차이(기준월-비교월)

    @Getter
    public static class PtrnDataDayType {

        @ApiModelProperty("요일 유형 코드")  // Y VARCHAR(7)
        @JsonProperty("day_type_cd")
        private String dayTypeCd;

        @ApiModelProperty("요일 유형 명")
        @JsonProperty("day_type_nm")
        private String dayTypeNm;

        @ApiModelProperty("요일 유형 설명")
        @JsonProperty("day_type_desc")
        private String dayTypeDesc;

        public PtrnDataDayType(TbCmmnCdDto entity) {
            this.dayTypeCd   = entity.getCmmnCd();
            this.dayTypeNm   = entity.getCmmnCdKorNm();
            this.dayTypeDesc = "[" + this.dayTypeCd + "]" + this.dayTypeNm;
        }
    }
}
