package com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.mqtt.handler.dto;

import cn.hutool.core.util.IdUtil;
import com.cico.nest.lcdp.boot.core.qxsd.domain.event.EventStatus;
import com.cico.nest.lcdp.boot.core.qxsd.domain.event.EventTypeAllEnum;
import com.cico.nest.lcdp.boot.core.qxsd.domain.event.ThirdEventStatus;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.common.constatnt.XlwConstants;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.database.dataobject.EventDetailDO;
import com.google.common.collect.Lists;
import lombok.Data;

import java.util.Date;

/**
 * 接收隧道管控事件MQTT消息体
 * topic=
 */
@Data
public class SdgkEventMqReceiveDTO {
    private Long id;

    private String deviceCode;//报警设备编码

    private String deviceName;//报警设备名称

    private String channelName;//报警通道名称

    private String picName;

    private String videoName;

    private Date alarmTime;//报警时间

    private String eventType;//报警类型 5 违章停车 9 逆行 11 洒落物 12 行人 13缓慢行驶

    private String destRectX;//报警位置X坐标

    private String destRectY;//报警位置Y坐标

    private String pileNumber;//桩号

    private String direction;//方向

    /**
     * 省中心名称
     */
    private String provCenterName;
    /**
     * 区域中心名称
     */
    private String regionCenterName;
    /**
     * 分中心名称
     */
    private String subCenterName;
    /**
     * 隧道所名称
     */
    private String tunnelOfficeName;
    /**
     * 隧道名称
     */
    private String tunnelName;

    private String eventId;
    private String deviceId;

    private String alarmId;

    /**
     * 隧道管控上报的事件消息转化为融合后的事件信息
     * @param mq
     * @return
     */
    public static EventDetailDO convert2DO(SdgkEventMqReceiveDTO mq){
        EventDetailDO vo = new EventDetailDO();
        vo.setId(IdUtil.objectId());
        vo.setThirdPartyId(mq.getEventId());
        vo.setAlarmId(mq.getAlarmId());
        vo.setEventSource(XlwConstants.EVENT_SOURCE_SDGK);
        vo.setIsRepeat(0);
        vo.setDeviceCode(mq.getDeviceCode());
        // vo.setTunnelId(); //需要根据隧道名字反查
        vo.setDirectionName(mq.getDirection());
        //vo.setDirection(); //需要查到上下行方向
        vo.setMilestone(mq.getPileNumber());
        //vo.setDeviceMilestone(); 需要根据设备信息反查出设备桩号
        //vo.setEventRoadNo(); 目前隧道管控没有该字段-车道号
        vo.setEventStartTime(mq.getAlarmTime());
        //vo.setEventEndTime(); 目前隧道管控没有该字段
        EventTypeAllEnum eventTypeAllEnum = EventTypeAllEnum.getBySdgkCode(mq.getEventType());
        vo.setEventType(eventTypeAllEnum.code);
        vo.setEventStatus(EventStatus.disposing_await.type);
        vo.setThirdEventStatus(ThirdEventStatus.early_warning.type);
        //vo.setSceneSituation(); 目前隧道管控没有该字段
        vo.setEventImagesPath(Lists.newArrayList(mq.getPicName()));
        vo.setCreateTime(new Date());
        return vo;
    }

    }
