package com.zcxk.dto;

import com.zcxk.common.CalcUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;

/**
 * @description
 * @auto wangli
 * @data 2020-11-19 9:31
 */
@Data
@Slf4j
public class DeviceCheckAlarmDto {

    private String tenantId;

    private Integer parentSceneId;  //一级场景id
    private String parentSceneName;//一级场景名称
    private Integer sceneId;//所属场景id
    private String sceneName;//所属场景名称

    private Integer deviceId;//设备id
    private String deviceName;//设备名称
    private Integer companyOrgId;//公司id
    private Integer deptOrgId;//部门id
    private String address;//地址
    private String alarmType;//报警类型
    private Integer attributeId;//设备属性
    private Date lastUpdateTime;//上次上报时间

    private Integer alarmSettingId;//报警设置id
    private Double duration;//离线时间
    private String alarmCondition;//报警规则（符号）
    private Double alarmValue;//报警值


    private String identifiter; //设备属性字段
    private String attributeName; //属性名称
    private String unit; //属性单位

    @ApiModelProperty(value = "报警设置开始时间",hidden = true)
    private String startTime;

    @ApiModelProperty(value = "报警设置结束时间" ,hidden = true)
    private String endTime;

    // 识别符号 >、≥、<、≤、=、≠
    public Boolean checkdeviceOffLine(){
        if(this.duration != null && this.alarmValue != null
              &&  StringUtils.isNotBlank(this.alarmCondition)){
               return CalcUtil.compareBySign(this.duration,this.alarmValue,this.alarmCondition);
        }
        return false;
    }
    public Boolean checkdeviceAttributeAlarm(Double value){
        if( value != null && alarmValue != null
                &&  StringUtils.isNotBlank(this.alarmCondition)){
                return CalcUtil.compareBySign(value,this.alarmValue,this.alarmCondition);
        }
        return false;
    }

    // 识别符号 >、≥、<、≤、=、≠
    //  A.报警规则为（≥、＞、≤、＜）：【设备名称】+【报警字段】+【字段数值】+【单位】+【报警规则】+【报警字段】+【设定数值】+【单位】
    //  B.报警规则为（=）：【设备名称】+【报警字段】
    //  C.报警规则为（≠）：【设备名称】+【报警字段】 + 不等于 + 【字段数值】 + 【单位】
    //  D.状态类型报警详情规则：【设备名称】+【状态】+【报警规则】+【数值】+单位
    public String getAlarminfo(Double receivedValue){
        if(this.alarmCondition.equals("=")){
            return  new StringBuilder().append(this.deviceName)
                    .append(this.attributeName).toString();
        }else if(this.alarmCondition.equals("≠")){
            return  new StringBuilder().append(this.deviceName)
                    .append(this.attributeName)
                    .append(this.alarmCondition)
                    .append(this.alarmValue)
                    .append(StringUtils.isNotBlank(this.unit)?this.unit:"").toString();
        }else{
          return  new StringBuilder().append(this.deviceName)
                    .append(this.attributeName)
                    .append(new BigDecimal(receivedValue).setScale(2, RoundingMode.UP))
                    .append(StringUtils.isNotBlank(this.unit)?this.unit:"")
                    .append(this.alarmCondition)
                    .append(this.alarmValue)
                    .append(StringUtils.isNotBlank(this.unit)?this.unit:"").toString();
        }
    }
}
