using adas_core.Domain.Enums;
using MongoDB.Bson;

namespace adas_core.Domain.Models.MongoModels;

#region DetailsConfig

/// <summary>
/// Represents the configuration settings for card details.
/// </summary>
public class CardDetailsConfig
{
    public ObjectId Id { get; set; }
    public List<SectionBoxLayout>? Header { get; set; }
    public List<RowDetailsConfig>? NurseRows { get; set; } = [];
    public List<SectionBoxLayout>? SmartSections { get; set; }
}

/// <summary>
/// Represents configuration settings for row details, typically used to control the display and behavior of expandable detail rows.
/// </summary>
public class RowDetailsConfig
{
    // Dynamic cells de nurse y Dynamic Obs de monitoring
    public List<CellDetails>? Cells { get; set; }
    public List<RowDetailsConfig>? Rows { get; set; }
    public double GrowPriority { get; set; }
    public string? Title { get; set; }
    public DisplayConfigEnums.RowType Type { get; set; }
    public DialogConfig? DialogConfig { get; set; }
}

/// <summary>
/// Represents a container for detailed information about an individual cell.
/// </summary>
public class CellDetails
{
    public List<ObservationTextRule>? TextRules { get; set; }
    public DisplayConfigEnums.CellType Type { get; set; }
    public ChartSettings? ChartSettings { get; set; }
    public string? SubType { get; set; }
    public double GrowPriority { get; set; }
    public List<CellDetails>? Cells { get; set; }
    public string? Name { get; set; }
    public string? Title { get; set; }
    public bool IsVisible { get; set; } = true;
    public string? ValuePathNested { get; set; }
    public List<string>? ValuePathKey { get; set; }
    public List<IconValueList>? IconValueList { get; set; }
    public List<string>? ObservationName { get; set; }
    public string? PaddingTop { get; set; }
    public string? PaddingBottom { get; set; }
    public string? PaddingLeft { get; set; }
    public string? PaddingRight { get; set; }
    public string? Color { get; set; }
    public string? BackgroundColor { get; set; }
    public bool? ShowIcon { get; set; }
    public string? FlexBasis { get; set; }
    public string? FlexDirection { get; set; }
    public string? Grow { get; set; }
    public string? Shrink { get; set; }
    public bool? ShowTitle { get; set; }
    public bool? IsStatic { get; set; }
    public DialogConfig? DialogConfig { get; set; }
}

#endregion