package com.its.vms.dto;

import com.its.vms.domain.enums.eVmsColor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;

/**
 *  Entity Class
 */
@Data
@Builder
@NoArgsConstructor//(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class TbVmsParkDto implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long prkPlceNmbr;           // 주차장관리번호
    private String prkPlceManageNo;     // 주차장 ID
    private String prkPlceNm;           // 주차장 이름
    private String vmsDsplNm;           // VMS 표출 주차장 이름
    private String cmncSttsCd;          // 주차장 통신상태(CMS0:정상, CMS1:이상)
    private Integer regPrkCmprtCo;      // 총 주차구획수(수동입력)
    private Integer runPrkCmprtCo;      // 주차장의 총 주차 구획 수, 150 (면) - 실시간 통신으로 입력
    private Integer parkingCgsStts;     // 주차장 상태 코드 (0 : 여유 (점유 50% 미만), 1 : 보통 (점유 70% 미만), 2 : 혼잡 (점유 90% 미만), 3 : 만차 (점유 90% 초과))
    private Integer remndrPrkCmprtCo;   // 주차장의 총 잔여 주차 구획 수, 150 (면)

    private boolean isSuccess;
    private String parkingCngstSttsDesc;

    public void calcCngstStts() {
        if (!this.isSuccess) {
            this.parkingCngstSttsDesc = "점검중";
            return;
        }
        switch(this.parkingCgsStts) {
            case 0:  this.parkingCngstSttsDesc = "여유"; break;
            case 1:  this.parkingCngstSttsDesc = "보통"; break;
            case 2:  this.parkingCngstSttsDesc = "혼잡"; break;
            case 3:  this.parkingCngstSttsDesc = "만차"; break;
            default:
                this.isSuccess = false;
                this.parkingCngstSttsDesc = "점검중";
                break;
        }
    }

    public int getGradeColorCd()
    {
        if (!this.isSuccess) {
            return eVmsColor.color_red.getValue();//황색(Yellow)
            //return eVmsColor.color_amber.getValue();//황색(Yellow)
        }
        switch(this.parkingCgsStts) {
            case 0:
            case 1:  return eVmsColor.color_green.getValue();   // 밝은녹색(Lime)
            case 2:  return eVmsColor.color_amber.getValue();   // 황색(Yellow)
            case 3:  //return eVmsColor.color_red.getValue();     // 적색(Red)
            default: return eVmsColor.color_red.getValue();
        }
    }

    public String getParkName() {
        return this.vmsDsplNm;
    }

    public String getCountText(String ATxt, int ACount) {
        if (!this.isSuccess) {
            return "  ";
        }

        boolean isSpace = ATxt.contains(" ");
        String sType = "";

        if (ATxt.contains("대")) {
            sType = "대";
        }
        if (ATxt.contains("면")) {
            sType = "면";
        }

        if (StringUtils.isNotEmpty(sType)) {
            if (isSpace) {
                return ACount + " " + sType;
            }
            return ACount + sType;
        }
        return String.valueOf(ACount);
    }
    
    public String getRemainCo(String ATxt) {
        return getCountText(ATxt, this.remndrPrkCmprtCo);
    }
    
    public String getTotalCo(String ATxt) {
        return getCountText(ATxt, this.regPrkCmprtCo);
    }
    
    public String getCgsSttsDesc() {
        return this.parkingCngstSttsDesc;
    }


}
