package com.qaup.collision.common.model;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point;

import java.util.List;

/**
 * 航空器路由模型类
 * 
 * 用于存储机场实时计算的航空器滑行路由信息
 * 该类不持久化到数据库，仅用于实时处理
 * 
 * @author AI Assistant
 * @version 1.0
 * @since 2025-01-17
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AircraftRoute {
    
    /**
     * 路由类型 (IN: 进港, OUT: 出港)
     */
    private String type;
    
    /**
     * 路由状态 (COMPLETE: 完成, CALCULATING: 计算中, MODIFIED: 已修改)
     */
    private String status;
    
    /**
     * 路由编码序列 (如: "F1,L4,138")
     */
    private String codes;
    
    /**
     * 路由几何图形 (LineString)
     */
    private LineString geometry;
    
    /**
     * 路由路径集合 (GeoJSON格式的路径段)
     */
    private List<RouteSegment> routeSegments;
    
    /**
     * 路由总长度 (米)
     */
    private Double totalLength;
    
    /**
     * 预计滑行时间 (秒)
     */
    private Integer estimatedTime;
    
    /**
     * 路由创建时间戳
     */
    private Long timestamp;
    
    /**
     * 路由修改次数
     */
    private Integer modificationCount;
    
    /**
     * 路由段模型
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class RouteSegment {
        
        /**
         * 路径段编码 (如: "L4", "F1")
         */
        private String code;
        
        /**
         * 路径段类型 (TAXIWAY: 滑行道, CONTACT: 联络道, RUNWAY: 跑道)
         */
        private String segmentType;
        
        /**
         * 路径段坐标点列表
         */
        private List<Point> coordinates;
        
        /**
         * 路径段长度 (米)
         */
        private Double length;
        
        /**
         * 建议滑行速度 (km/h)
         */
        private Double recommendedSpeed;
        
        /**
         * 路径段顺序
         */
        private Integer sequence;
        
        /**
         * 是否为关键路径段
         */
        private Boolean critical;
    }
    
    /**
     * 检查路由是否有效
     */
    public boolean isValid() {
        return type != null && 
               status != null && 
               codes != null && 
               !codes.trim().isEmpty() &&
               routeSegments != null && 
               !routeSegments.isEmpty();
    }
    
    /**
     * 获取路由段数量
     */
    public int getSegmentCount() {
        return routeSegments != null ? routeSegments.size() : 0;
    }
    
    /**
     * 检查是否为进港路由
     */
    public boolean isArrivalRoute() {
        return "IN".equals(type);
    }
    
    /**
     * 检查是否为出港路由
     */
    public boolean isDepartureRoute() {
        return "OUT".equals(type);
    }
    
    /**
     * 检查路由是否完成
     */
    public boolean isComplete() {
        return "COMPLETE".equals(status);
    }
    
    /**
     * 检查路由是否被修改过
     */
    public boolean isModified() {
        return "MODIFIED".equals(status) || 
               (modificationCount != null && modificationCount > 0);
    }
}