package com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.http.xlw.dto;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONArray;
import com.cico.nest.lcdp.boot.core.qxsd.domain.event.EventTypeAllEnum;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.database.dataobject.EventDetailDO;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.ws.xlw.dto.XlwRealTimeEventDTO;
import com.cico.nest.lcdp.framework.common.util.date.DateUtils;
import lombok.Data;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

import static com.cico.nest.lcdp.boot.core.qxsd.domain.event.EventStatus.disposing_await;

/**
 * @author zws
 * @date 2024/8/16
 */

@Data
public class XlwEventListDTO {

    /**
     * 事件唯一ID
     */
    private String guid;

    /**
     * 事件类型
     */
    private Integer eventType;

    /**
     * 轨迹id
     */
    private String trackId;

    /**
     * 车辆唯一id
     */
    private String entityId;

    /**
     * 车牌号码
     */
    private String entityName;

    /**
     * 事件备注
     */
    private String eventRemark;

    /**
     * 车辆颜色
     */
    private Integer entityColor;

    /**
     * 事件状态
     */
    private Integer eventStatus;

    /**
     * 确认人
     */
    private String ackUser;

    /**
     * 确认时间
     */
    private String ackTime;

    /**
     * 关闭事件用户
     */
    private String clearUser;

    /**
     * 轨迹开始时间
     */
    private String trackStartTime;

    /**
     * 轨迹结束时间
     */
    private String trackEndTime;

    /**
     * 是否生成全息回放数据，枚举：0否、1是
     */
    private Integer historyStatus;

    /**
     * 事件开始时间
     */
    private String startTime;

    /**
     * 事件结束时间
     */
    private String endTime;

    /**
     * 事件开始预警时间
     */
    private String startWarningTime;

    /**
     * 事件持续时间
     */
    private Integer duration;

    /**
     * 隧道ID
     */
    private String tunnelId;

    /**
     * 隧道方向
     */
    private String directionName;

    /**
     * 车型、参照交通部的收费车型（1~4 客1~客4 、11~16 货1~货6、专项车21~26 专项1~专项6）
     */
    private Integer entityType;

    /**
     * 车道号
     */
    private Integer eventRoadNo;

    /**
     * 车辆时速，单位：km/h
     */
    private Float speed;

    /**
     * 桩号
     */
    private String milestone;

    /**
     * 方向。上行/下行
     */
    private String direction;


    public static EventDetailDO convert2DO(XlwEventListDTO dto){
        EventDetailDO eventDO = new EventDetailDO();
        eventDO.setThirdPartyId(dto.getGuid());
        eventDO.setDirection(dto.getDirection());
        eventDO.setDirectionName(dto.getDirectionName());
        if(Objects.nonNull(dto.getEventRoadNo())){
            eventDO.setEventRoadNo(String.valueOf(dto.getEventRoadNo() + 1));
        }
        Date startDate = DateUtil.parse(dto.getStartTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        eventDO.setEventStartTime(startDate);
        //eventDO.setEventType(XlwRealTimeEventDTO.convertDOEventType(dto.getEventType()));
        EventTypeAllEnum eventTypeEnum = EventTypeAllEnum.getByXlwCode(String.valueOf(dto.getEventType()));
        eventDO.setEventType(eventTypeEnum.getCode());
        eventDO.setEventStatus(disposing_await.type);
        //车牌号码
        List<String> eventCarPlate = new ArrayList<>();
        eventCarPlate.add(dto.getEntityName());
        eventDO.setEventCarPlate(eventCarPlate);
        //车辆信息
        EventDetailDO.EventCarInfo eventCarInfo = new EventDetailDO.EventCarInfo();
        eventCarInfo.setCarId(dto.getEntityId());
        eventCarInfo.setCarPlateColor(dto.getEntityColor());
        eventCarInfo.setSpeed(dto.getSpeed());
        eventCarInfo.setVehicleType(XlwRealTimeEventDTO.carModelConvertVehicleType(dto.getEntityType()));
        eventCarInfo.setCarPlate(dto.getEntityName());
        List<EventDetailDO.EventCarInfo> carInfoList = new ArrayList<>();
        carInfoList.add(eventCarInfo);
        eventDO.setCarInfoList(JSONArray.from(carInfoList));
        return eventDO;
    }

    public static List<EventDetailDO> convert2DO(List<XlwEventListDTO> dtoList){
        return dtoList.stream().map(XlwEventListDTO::convert2DO).toList();
    }

}
