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

import com.cico.nest.lcdp.boot.core.qxsd.adapter.web.vo.PassingProfileVO;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;

import java.util.List;
import java.util.Objects;

/**
 * @author zws
 * 通行记录DTO
 * @date 2024/10/11
 */

@Data
public class XlwPassingProfileDTO {
    //数据唯一id
    private String guid;

    //车辆唯一id
    private String entityId;

    //车牌号码
    private String entityName;

    //车牌颜色--蓝：0、黄：1、黑：2、白：3、渐变绿：4、黄绿双拼：5、蓝白渐变：6、临时牌照：7、未知：9、绿：11、红12
    private Integer entityColor;

    //全息车型，枚举：1小型车、2中型车、3大型车、4非机动车
    private Integer entityType;

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

    //客货分类：客车、货车、专项作业车
    private String carClass;

    //车辆分类：大型客车、危化品车
    private String carClassify;

    //平均速度。单位：km/h
    private Float averageSpeed;

    //最高速度。单位：km/h
    private Float maxSpeed;

    //行驶状态，枚举：1行驶中、0已出隧道
    private Integer pointPosition;

    //入口时间，格式：yyyy-MM-dd hh:mm:ss
    private String firstTime;

    //出口时间，格式：yyyy-MM-dd hh:mm:ss
    private String lastTime;

    //通行时长。单位：秒
    private Integer duration;

    //隧道id
    private String tunnelId;

    //隧道方向
    private String directionName;

    public static List<PassingProfileVO> toVOList(List<XlwPassingProfileDTO> dtoList) {
        return dtoList.stream().map(XlwPassingProfileDTO::toVO).toList();
    }
    public static PassingProfileVO toVO(XlwPassingProfileDTO dto) {
        PassingProfileVO vo = new PassingProfileVO();
        vo.setGuid(dto.getGuid());
        vo.setCarPlate(dto.getEntityName());
        vo.setCarPlateColor(dto.getEntityColor());
        vo.setCarType(carTypeConvert(dto.getEntityType()));
        vo.setAverageSpeed(averageSpeedConvert(dto.getAverageSpeed()));
        vo.setDirectionName(dto.getDirectionName());
        vo.setInTunnelTime(dto.getFirstTime());
        vo.setOutTunnelTime(dto.getLastTime());
        vo.setDuration(durationConvert(dto.getDuration()));
        vo.setTunnelId(tunnelIdConvert(dto.getTunnelId()));
        vo.setCarId(dto.getEntityId());
        return vo;
    }

    public static String durationConvert(Integer duration){
        duration = duration / 1000;
        int second = duration % 60;
        Integer minute = duration / 60;
        return minute + "分" + second + "秒";
    }
    public static String averageSpeedConvert(Float averageSpeed){
        return averageSpeed + "km/h";
    }

    public static String carTypeConvert(Integer carType){
        if(Objects.isNull(carType)){
            return "未知";
        }
        return switch (carType) {
            case 1 -> "小型车";
            case 2 -> "中型车";
            case 3 -> "大型车";
            case 4 -> "非机动车";
            default -> "未知";
        };
    }

    public static String tunnelIdConvert(String tunnelId){
        if("tunnel_up".equals(tunnelId)){
            return "xl_tunnel_up";
        }else if("tunnel_down".equals(tunnelId)){
            return "xl_tunnel_down";
        }

        return tunnelId;
    }

}
