namespace adas_core.module.ProxyDevices;

/// <summary>
/// Represents the settings for proxy devices, which are used to define and manage virtual devices that can be used for testing, simulation, or other purposes within the ADAS (Advanced Driver Assistance Systems) core module. 
/// Each proxy device can have its own unique identifier, type, enabled status, and a set of parameters that can be customized as needed.
/// </summary>
public class ProxyDeviceSettings : List<ProxyDevice>
{
}

/// <summary>
/// Represents a single proxy device with its properties, including an identifier, type, enabled status, and a dictionary of parameters that can be used to configure the device's behavior or characteristics.
/// </summary>
public class ProxyDevice
{
    /// <summary>
    /// Gets or sets the unique identifier for the proxy device. This identifier is used to distinguish between different proxy devices and can be used for referencing the device in various operations or configurations.
    /// </summary>
    public string Id { get; set; } = null!;

    /// <summary>
    /// Gets or sets the type of the proxy device. This property indicates the category or classification of the device, which can be used to determine how the device should be handled or processed within the ADAS core module. 
    /// The type can be used to specify different behaviors, capabilities, or configurations for different types of proxy devices.
    /// </summary>
    public string Type { get; set; } = null!;

    /// <summary>
    /// Gets or sets a value indicating whether the proxy device is enabled or not. If this property is set to true, the device is considered active and can be used in operations or simulations. 
    /// If set to false, the device is considered inactive and will not be used in any operations or simulations until it is enabled again.
    /// </summary>
    public bool Enabled { get; set; } = true;

    /// <summary>
    /// Gets or sets a dictionary of parameters for the proxy device. This dictionary allows for flexible configuration of the device by storing key-value pairs, 
    /// where the key is a string representing the parameter name and the value is an object that can hold any type of data associated with that parameter.
    /// </summary>
    public Dictionary<string, object?> Parameters { get; set; } = new();
}