using RobotNet.RobotShares.VDA5050.Visualization;
using System.ComponentModel.DataAnnotations;

namespace RobotNet.RobotShares.VDA5050.State;

#nullable disable

public enum OperatingMode
{
    AUTOMATIC,
    SEMIAUTOMATIC,
    MANUAL,
    SERVICE,
    TEACHIN,
}
public class StateMsg
{
    [Required]
    public uint HeaderId { get; set; }
    [Required]
    public string Timestamp { get; set; }
    [Required]
    public string Version { get; set; }
    [Required]
    public string Manufacturer { get; set; }
    [Required]
    public string SerialNumber { get; set; }
    public Map[] Maps { get; set; } = [];
    [Required]
    public string OrderId { get; set; }
    [Required]
    public int OrderUpdateId { get; set; }
    public string ZoneSetId { get; set; }
    [Required]
    public string LastNodeId { get; set; }
    [Required]
    public int LastNodeSequenceId { get; set; }
    [Required]
    public bool Driving { get; set; }
    public bool Paused { get; set; }
    public bool NewBaseRequest { get; set; }
    public double DistanceSinceLastNode { get; set; }
    [Required]
    public string OperatingMode { get; set; }
    [Required]
    public NodeState[] NodeStates { get; set; } = [];
    [Required]
    public EdgeState[] EdgeStates { get; set; } = [];
    public AgvPosition AgvPosition { get; set; } = new();
    public Velocity Velocity { get; set; } = new();
    public Load[] Loads { get; set; } = [];
    [Required]
    public ActionState[] ActionStates { get; set; } = [];
    [Required]
    public BatteryState BatteryState { get; set; } = new();
    [Required]
    public Error[] Errors { get; set; } = [];
    public Information[] Information { get; set; } = [];
    [Required]
    public SafetyState SafetyState { get; set; } = new();
}
