using System;
using MultiWheelC.TrajectoryPlanning.CoarsePath;
using MultiWheelC.TrajectoryPlanning.Mapping;
using MultiWheelC.TrajectoryPlanning.PathSmoothing;

namespace MultiWheelC.TrajectoryPlanning.EMPlanner;

public sealed class EmPlanningRequest
{
    public EmPlanningRequest(
        PathSmoothingResult referencePath,
        PlanningGridMap map,
        VehicleParameters vehicle,
        VehicleMotionState vehicleState,
        EmPlannerConfiguration configuration,
        int segmentIndex,
        EmTrajectory previousTrajectory,
        DateTimeOffset requestedAtUtc,
        DateTimeOffset effectiveAtUtc,
        string outputTrajectoryId,
        string referencePathId,
        string previousTrajectoryId,
        EmMotionModel motionModel)
    {
        ReferencePath = referencePath;
        Map = map;
        Vehicle = vehicle;
        VehicleState = vehicleState;
        Configuration = configuration;
        SegmentIndex = segmentIndex;
        PreviousTrajectory = previousTrajectory;
        RequestedAtUtc = requestedAtUtc;
        EffectiveAtUtc = effectiveAtUtc;
        OutputTrajectoryId = outputTrajectoryId;
        ReferencePathId = referencePathId;
        PreviousTrajectoryId = previousTrajectoryId;
        MotionModel = motionModel;
    }

    public PathSmoothingResult ReferencePath { get; }
    public PlanningGridMap Map { get; }
    public VehicleParameters Vehicle { get; }
    public VehicleMotionState VehicleState { get; }
    public EmPlannerConfiguration Configuration { get; }
    public int SegmentIndex { get; }
    public EmTrajectory PreviousTrajectory { get; }
    public DateTimeOffset RequestedAtUtc { get; }
    public DateTimeOffset EffectiveAtUtc { get; }
    public string OutputTrajectoryId { get; }
    public string ReferencePathId { get; }
    public string PreviousTrajectoryId { get; }
    public EmMotionModel MotionModel { get; }
}

// The request owns this DTO contract; Task 2 adds its request-bound settings.
public sealed partial class EmPlannerConfiguration
{
}
