using RobotNet.RobotShares.VDA5050.Order;
using RobotNet.RobotShares.VDA5050.State;
using RobotNet.RobotShares.VDA5050.Visualization;

namespace RobotNet.RobotShares.Dtos;

#nullable disable

public class RobotInfomationDto
{
    public string RobotId { get; set; }
    public string Name { get; set; }
    public Guid MapId { get; set; }
    public Load[] Loads { get; set; } = [];
    public BatteryState Battery { get; set; } = new();
    public Error[] Errors { get; set; } = [];
    public Information[] Infomations { get; set; } = [];
    public AgvPosition AgvPosition { get; set; } = new();
    public Velocity AgvVelocity { get; set; } = new();
    public Navigation Navigation { get; set; } = new();
}

public class Navigation
{
    public string NavigationState { get; set; } = string.Empty;
    public NavigationPathEdge[] RobotPath { get; set; } = [];
    public NavigationPathEdge[] RobotBasePath { get; set; } = [];
    public List<NavigationPathNode> LaserScaner { get; set; } = [];
}

public record NavigationPathNode(double X, double Y);

public class NavigationPathEdge()
{
    public double StartX { get; set; }
    public double StartY { get; set; }
    public double EndX { get; set; }
    public double EndY { get; set; }
    public double ControlPoint1X { get; set; }
    public double ControlPoint1Y { get; set; }
    public double ControlPoint2X { get; set; }
    public double ControlPoint2Y { get; set; }
    public int Degree { get; set; }
}