using System;
using System.Collections.Generic;
using System.Text;
using static CommonUsage.Protocols.VDA5050.Objects.agvGeometry;

namespace CommonUsage.Protocols.VDA5050.Objects
{
    public class agvGeometry
    {
        // Wheel Definitions
        public List<wheelDefinition> wheelDefinitions { get; set; } = new List<wheelDefinition>();

        // 2D Envelopes
        public List<envelope2D> envelopes2D { get; set; } = new List<envelope2D>();

        // 3D Envelopes
        public List<envelope3D> envelopes3D { get; set; } = new List<envelope3D>();

        public class wheelDefinition
        {
            public enum WheelType { DRIVE, CASTER, FIXED, MECANUM }

            public WheelType type { get; set; }
            public bool isActiveDriven { get; set; }
            public bool isActiveSteered { get; set; }

            // Wheel Position
            public double positionX { get; set; }
            public double positionY { get; set; }
            public double positionTheta { get; set; }  // Required for fixed wheels

            // Wheel Properties
            public double diameter { get; set; }
            public double width { get; set; }
            public double centerDisplacement { get; set; } = 0;  // Default to 0 if not defined
            public string constraints { get; set; }
        }

        public class envelope2D
        {
            public string set { get; set; }
            public List<polygonPoint> polygonPoints { get; set; } = new List<polygonPoint>();
            public string description { get; set; }

            public class polygonPoint
            {
                public double x { get; set; }
                public double y { get; set; }
            }
        }

        public class envelope3D
        {
            public string set { get; set; }
            public string format { get; set; }
            public object data { get; set; }  // JSON object for 3D envelope data
            public string url { get; set; }
            public string description { get; set; }
        }
    }

}

