using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;

namespace RobotNet.RobotManager.Services.OpenACS;

public class TrafficACSRequestBody(string agvId, string trafficZoneId, string inOut)
{
    [JsonPropertyName("agv_id")]
    [Required]
    public string AgvId { get; set; } = agvId;

    [JsonPropertyName("traffic_zone_id")]
    [Required]
    public string TrafficZoneId { get; set; } = trafficZoneId;

    [JsonPropertyName("inout")]
    [Required]
    public string InOut { get; set; } = inOut;
}

public class TrafficACSRequestV2
{
    [JsonPropertyName("header")]
    [Required]
    public ACSHeader Header { get; set; } = new("TRAFFIC_REQ", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

    [JsonPropertyName("body")]
    [Required]
    public TrafficACSRequestBody Body { get; set; }

    public TrafficACSRequestV2(string agvId, string trafficZoneId, string inOut)
    {
        if (string.IsNullOrWhiteSpace(agvId))
            throw new ArgumentException("AGV ID không thể rỗng.", nameof(agvId));
        if (string.IsNullOrWhiteSpace(trafficZoneId))
            throw new ArgumentException("Traffic Zone ID không thể rỗng.", nameof(trafficZoneId));
        if (string.IsNullOrWhiteSpace(inOut))
            throw new ArgumentException("In OUT không thể rỗng.", nameof(inOut));

        Body = new (agvId, trafficZoneId, inOut);
    }
}