using System;
using System.Collections.Generic;

namespace MultiWheelC.TrajectoryPlanning.Mapping;

/// <summary>
/// 规划地图的完整建图输入。
///
/// 注意：
/// - 此对象只描述地图内容，不包含车辆、起终点、PNG 或终端日志等调试参数。
/// - 障碍物来源快照变化时，调用方必须更新对应的 SourceVersion。
/// </summary>
public sealed class PlanningMapRequest
{
    /// <summary>
    /// 地图世界边界。
    /// 单位：mm；边界采用左闭右开范围，由 MapBoundsMm 的 XMin、XMax、YMin、YMax 定义。
    /// </summary>
    public MapBoundsMm Bounds { get; set; }
    /// <summary>
    /// 栅格边长。
    /// 单位：mm；当前 MapBoundsMm 允许的范围为 20 至 200 mm。
    /// </summary>
    public float ResolutionMm { get; set; }
    /// <summary>
    /// 参与建图的统一障碍物来源。
    /// 参数：列表中的每个来源必须具有唯一 ID 和非负版本号；可为空列表。
    /// </summary>
    public IReadOnlyList<IMapObstacleSource> ObstacleSources { get; set; } = Array.Empty<IMapObstacleSource>();
    /// <summary>
    /// 是否明确允许没有任何障碍物几何的地图参与规划。
    /// 返回语义：false 时，隐式空图会被标记为不可规划；true 时空图可用于规划。
    /// </summary>
    public bool AllowExplicitEmptyMap { get; set; }
}
