package com.easyproject.common.utils.map;

import lombok.Data;

import java.util.List;

/**
* 方法说明: 腾讯地图-线路规划
* 传入参数:
* 返回的值:
* 作者: java-002
* 日期: 2025/9/7 0007
*/
@Data
public class DirectionResponse {
    private int status; // 状态码，0为正常，其他为异常
    private String message; // 状态说明
    private String request_id; // 本次请求的唯一标识
    private Result result; // 搜索结果对象

    @Data
    public class Result {
        private List<Route> routes; // 路线方案列表
    }

    @Data
    public class Route {
        private String mode; // 方案交通方式，固定值为"DRIVING"
        private List<String> tags; // 方案标签，表明方案特色
        private double distance; // 方案总距离，单位为米
        private double duration; // 方案估算时间（结合路况），单位为分钟
        private int traffic_light_count; // 方案途经红绿灯个数
        private Restriction restriction; // 限行信息对象
        private List<Double> polyline; // 方案路线坐标点串
        private List<Waypoint> waypoints;//途经点，顺序与输入waypoints一致 （输入waypoints时才会有此结点返回）
        private TaxiFare taxi_fare;//预估打车费
        private List<Step> steps;//路线步骤
        private List<Speed> speed;//路况信息，只有设置get_speed=1才会返回
    }

    @Data
    public class Restriction {
        private int status; // 限行状态码
    }

    @Data
    public class Waypoint {
        private String title; // 途经点路名
        private Location location; // 途经点坐标对象
        private int polyline_idx; // 该途经点在方案路线坐标点串中的索引位置
        private int duration; // 预估到达耗时，单位为分钟
        private double distance; // 起点到该途经点的距离，单位为米
    }

    @Data
    public class Location {
        private double lat; // 纬度
        private double lng; // 经度
    }

    @Data
    public class TaxiFare {
        private double fare; // 预估打车费用，单位为元
    }

    @Data
    public class Step {
        private String instruction; // 阶段路线描述
        private List<Integer> polyline_idx; // 阶段路线坐标点串在方案路线坐标点串中的位置
        private String road_name; // 阶段路线路名
        private String dir_desc; // 阶段路线方向
        private double distance; // 阶段路线距离，单位为米
        private String act_desc; // 阶段路线末尾动作
        private String accessorial_desc; // 末尾辅助动作
    }

    @Data
    public class Speed {
        private List<Integer> polyline_idx; // 阶段路线坐标点串在路线坐标点串中的位置
        private double distance; // 距离，单位为米
        private int level; // 路况类型
    }

}

