namespace adas_core.Domain.Models.DTO.Display;

/// <summary>
/// Represents a data transfer object (DTO) that encapsulates color configuration settings for transferring color-related data between application layers or systems.
/// </summary>
public class ColorConfigDto
{
    public LevelColors? Level { get; set; }
    public TextColors? Text { get; set; }
    public ArrowColors? Arrow { get; set; }
    public IndicatorColors? Indicator { get; set; }
    public GraphColors? Graph { get; set; }
    public StatusBoxNumberColors? BoxNumber { get; set; }
    public TherapyColors? Therapy { get; set; }
    public TestColors? Test { get; set; }
    public ProcedureColors? Procedure { get; set; }

    /// <summary>
    /// Represents configuration settings that define the visual appearance, such as colors, themes, or styling preferences.
    /// </summary>
    public class AppearanceSettings
    {
        public string? TextColor { get; set; }

        public string? BackgroundColor { get; set; }

        public string? Icon { get; set; }

        public string? IconDefault { get; set; }
        public double? IconInvertColor { get; set; }
    }

    /// <summary>
    /// Represents the color settings used for rendering numeric values within a status box.
    /// </summary>
    /// <remarks>
    /// This type is intended to encapsulate the visual color configuration associated with the numeric portion of a status box display.
    /// </remarks>
    public class StatusBoxNumberColors
    {
        public AppearanceSettings? Reserved { get; set; }
        public AppearanceSettings? InUse { get; set; }
        public AppearanceSettings? Available { get; set; }
        public AppearanceSettings? Locked { get; set; }
        public AppearanceSettings? Transferable { get; set; }
        public AppearanceSettings? Exitus { get; set; }
        public AppearanceSettings? Altable { get; set; }
    }

    /// <summary>
    /// Provides a centralized set of color values used throughout the therapy-related user interface or visual components.
    /// </summary>
    public class TherapyColors
    {
        public AppearanceSettings? Default { get; set; }
        public AppearanceSettings? Initialized { get; set; }
        public AppearanceSettings? Finished { get; set; }
        public AppearanceSettings? InProgress { get; set; }
    }

    /// <summary>
    /// Provides a collection of color values intended for use in test scenarios.
    /// </summary>
    public class TestColors
    {
        public AppearanceSettings? Default { get; set; }
        public AppearanceSettings? Initialized { get; set; }
        public AppearanceSettings? Finished { get; set; }
        public AppearanceSettings? Expired { get; set; }
    }

    /// <summary>
    /// Represents a collection of color definitions used to visually represent procedures.
    /// </summary>
    public class ProcedureColors
    {
        public AppearanceSettings? Default { get; set; }
        public AppearanceSettings? Initialized { get; set; }
        public AppearanceSettings? Finished { get; set; }
        public AppearanceSettings? Expired { get; set; }
    }

    /// <summary>
    /// Represents a set of colors associated with level rendering or visual state.
    /// </summary>
    /// <remarks>
    /// Used to centralize color definitions related to level display, allowing consistent theming across level-related UI elements.
    /// </remarks>
    public class LevelColors
    {
        public string? Level1 { get; set; }
        public string? Level2 { get; set; }
        public string? Level3 { get; set; }
        public string? Level4 { get; set; }
        public string? Level5 { get; set; }
    }

    /// <summary>
    /// Represents a collection of predefined text color values or definitions for styling text output.
    /// </summary>
    public class TextColors
    {
        public string? Normal { get; set; }
        public string? Warning { get; set; }
        public string? Alert { get; set; }
        public string? Improve { get; set; }
        public string? Expired { get; set; }
    }

    /// <summary>
    /// Provides a set of predefined color values used for rendering arrows in charts or visualizations.
    /// </summary>
    public class ArrowColors
    {
        public string? Normal { get; set; }
        public string? Warning { get; set; }
        public string? Alert { get; set; }
        public string? Improve { get; set; }
    }

    /// <summary>
    /// Represents a collection or definition of colors used to visually style an indicator.
    /// </summary>
    public class IndicatorColors
    {
        public string? Empty { get; set; }
        public string? Warning { get; set; }
        public string? Normal { get; set; }
        public string? Alert { get; set; }
        public string? Background { get; set; }
        public string? EmptyBackground { get; set; }
    }

    /// <summary>
    /// Represents a collection or definition of colors used for rendering graphs and chart elements.
    /// </summary>
    public class GraphColors
    {
        public string? Normal { get; set; }
        public string? Warning { get; set; }
        public string? Alert { get; set; }
    }
}