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

import cn.hutool.core.date.DateUtil;
import com.cico.nest.lcdp.boot.core.qxsd.domain.event.EventTypeAllEnum;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.common.constatnt.SdgkConstants;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.database.dataobject.EventDetailDO;
import lombok.Data;

/**
 * 全息隧道事件上报给隧道管控MQTT消息体
 * topic = event/设备编码/videoEvent
 */
@Data
public class QxsdEventMQReportDTO {
      //原始设备ID
      private String deviceId;
      //报警事件唯一ID，由companyId+UUID组成
      private String eventId;
      // 事件类型:66001拥堵，66002缓慢行驶，66003停驶，66004违章停车，逆行：66005，行人66006， 抛洒物66007,火灾66008,事故66009，异常天气66010,超速66011，违法变道66012，闯入66013,其他66014 ，施工 66015
      private String eventTypeId;
      // 事件源公司Id,由高信提供
      private String companyId;
      //发生事件的时间 "yyyy-MM-dd HH:mm:ss"
      private String alarmTime;
      //事件在图片中的起点位置，x坐标。左上角为0
      private String x;
      //事件在图片中的起点位置，y坐标。左上角为0
      private String y;
      //事件在图片中距离起位置的高度
      private String height;
      //事件在图片中距离起点位置的宽度
      private String width;
      //图片文件地址 "http://x.x.x.x/joeur/zxxx.jpg",
      private String imagePath;
      //视频文件地址 "http://x.x.x.x/video/xxxx.mp4",
      private String videoPath;
      //详细说明
      private String content;
      //1路面，2隧道
      private Integer location;

      public QxsdEventMQReportDTO() {
      }

      public QxsdEventMQReportDTO(String deviceId, String eventId, String eventTypeId, String companyId, String alarmTime) {
            this.deviceId = deviceId;
            this.eventId = eventId;
            this.eventTypeId = eventTypeId;
            this.companyId = companyId;
            this.alarmTime = alarmTime;
            this.location = SdgkConstants.EVENT_LOCATION_TUNNEL;
      }

      /**
       * 全息事件转化成上报隧道管控消息体
       * @param detailDO
       * @return
       */
      public static QxsdEventMQReportDTO convert2MQ(EventDetailDO detailDO){
            QxsdEventMQReportDTO dto = new QxsdEventMQReportDTO();
            dto.setDeviceId(detailDO.getDeviceCode());//todo 这里传进来的是什么id需要有实际的数据后观察调整
            dto.setEventId(detailDO.getThirdPartyId());//物联网事件上报的文档上：报警事件唯一ID，由companyId+UUID组成
            EventTypeAllEnum eventTypeAllEnum = EventTypeAllEnum.findByType(detailDO.getEventType());
            dto.setEventTypeId(eventTypeAllEnum.sdgkCode);
            dto.setCompanyId(SdgkConstants.MQ_COMPANY_ID);
            String alarmTime = DateUtil.format(detailDO.getEventStartTime(),"yyyy-MM-dd HH:mm:ss");
            dto.setAlarmTime(alarmTime);
            dto.setLocation(SdgkConstants.EVENT_LOCATION_TUNNEL);
            String imagePsth = detailDO.getEventImagesPath()==null?null:detailDO.getEventImagesPath().get(0);
            dto.setImagePath(imagePsth);
            // dto.setVideoPath(); 待优化设置
            dto.setContent(detailDO.getSceneSituation());
            return dto;
      }
}
