using MultiWheelC.TrajectoryPlanning.Mapping;

namespace MultiWheelC.TrajectoryPlanning.CoarsePath.Facade;

/// <summary>
/// 一次从地图输入到 Hybrid A* 粗路径输出的完整业务请求。
/// 地图边界、分辨率和障碍物几何位于 <see cref="MapRequest"/> 中并使用 mm；位姿和车辆几何使用 m，航向使用 rad，曲率使用 1/m。
/// </summary>
public sealed class CoarsePathPlanningJob
{
    /// <summary>创建默认目标方向、起步曲率和关闭调试旁路的业务请求。</summary>
    public CoarsePathPlanningJob()
    {
        StartVehicleCurvature = 0d;
        GoalDirection = GoalDirectionConstraint.Any;
        DebugOptions = new PlanningDebugOptions();
    }

    /// <summary>本次唯一建图输入；边界、分辨率和障碍物几何均遵循 Map 模块的 mm 契约。</summary>
    public PlanningMapRequest MapRequest { get; set; }

    /// <summary>车辆几何中心的起始位姿；位置单位 m，航向单位 rad。</summary>
    public Pose2D Start { get; set; }

    /// <summary>车辆几何中心的目标位姿；位置单位 m，航向单位 rad。</summary>
    public Pose2D Goal { get; set; }

    /// <summary>车辆尺寸、安全余量和曲率限制；尺寸单位 m，曲率单位 1/m。</summary>
    public VehicleParameters Vehicle { get; set; }

    /// <summary>原语、离散、容差、代价和资源上限配置。</summary>
    public HybridAStarConfiguration Configuration { get; set; }

    /// <summary>车辆起步曲率，单位 1/m；默认值为 0。</summary>
    public double StartVehicleCurvature { get; set; }

    /// <summary>起步方向约束；null 表示可从前进或倒车开始。</summary>
    public TravelDirection? StartDirection { get; set; }

    /// <summary>目标进入方向约束；默认值为 <see cref="GoalDirectionConstraint.Any"/>。</summary>
    public GoalDirectionConstraint GoalDirection { get; set; }

    /// <summary>可选调试旁路配置；默认关闭且使用空接收器，不参与地图或路径计算。</summary>
    public PlanningDebugOptions DebugOptions { get; set; }
}
