package com.gci.boot.modules.gis.vo;

import com.gci.boot.common.util.LatLonPoint;
import lombok.Data;

import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalTime;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * @author 24642
 */
@Data
public class GisRedisVehicleVo {
    /**
     * 围栏id
     */
    private String fenceId;
    /**
     * 围栏名称
     */
    private String fenceName;
    /**
     * 车牌号 查询的时候使用的
     */
    private String plateNumber;
    /**
     * 开始时间
     */
    private String startTime;
    /**
     * 结束时间
     */
    private String endTime;
    /**
     * 围栏类型 1-停场 2-行驶
     */
    private Integer fenceType;
    /**
     * 是否跨天
     */
    private Integer isOvernight;
    /**
     * 车辆驶出围栏多少分钟后开始告警，整数
     */
    private Integer alertDelayMinutes;
    /**
     * 围栏json
     */
    private String geoJson;
    /**
     * 围栏坐标list
     */
    private List<LatLonPoint> coordinateList;

    /**
     * 判断当前gps时间是否在围栏限制的生效时间范围内
     * @param gpsTime
     * @return
     */
    public boolean isWithinFenceTime(Date gpsTime){
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
            String formatGpsTime = sdf.format(gpsTime);
            LocalTime current = LocalTime.parse(formatGpsTime);
            LocalTime start = LocalTime.parse(startTime);
            LocalTime end = LocalTime.parse(endTime);

            if (Objects.nonNull(isOvernight) && isOvernight == 1) {
                // 如果跨夜，将结束时间加一天
                end = end.plus(Duration.ofHours(24));
            }
            if (start.isBefore(end)) {
                // 同一天内的时间段
                return !current.isBefore(start) && !current.isAfter(end);
            } else {
                // 跨天的时间段，例如 22:00 到 06:00
                return !current.isBefore(start) || !current.isAfter(end);
            }
        } catch (Exception e) {
            e.printStackTrace();
            // 解析时间出错，返回false
            return false;
        }
    }
}
