using System.IdentityModel.Tokens.Jwt;
using adas_core.Domain.Models.GroupedObservations;
using adas_core.Domain.Models.Masters;
using adas_core.Domain.Models.MongoModels;
using MongoDB.Bson;

namespace adas_core.Domain.Models.SignalR;

/// <summary>
/// Represents data associated with a message, providing a structure for storing and transporting message-related information.
/// </summary>
public class MessageData
{
    public bool IsDemo { get; set; } = false;
    public LocaleEnum Locale { get; set; }
    public string? PatientId { get; set; }
    public string? Section { get; set; }
    public SectionConfig? SectionConfig { get; set; }
    public List<PatientLocation> Locations { get; set; } = [];
    public List<ObjectId> LocationIds { get; set; } = [];

    public bool SectionInfo { get; set; } = true;

    public int Last { get; set; } = 2;

    public bool Pumps { get; set; } = true;

    public bool RecordingAlerts { get; set; } = true;

    public bool Recordings { get; set; } = true;

    public bool Treatments { get; set; } = true;

    public bool Appointments { get; set; } = true;

    public bool Diagnosis { get; set; } = true;

    public bool Relay { get; set; } = true;

    public bool Beacons { get; set; } = true;

    public List<Recording> CurrentRecordings { get; set; } = [];

    public bool Chat { get; set; } = true;

    public string? ChatMessage { get; set; }

    public PatientLocation? ChatMessageToLocation { get; set; }

    public DateTime? ChatMessageDate { get; set; }

    // PointOfCare Subscription
    public PatientLocation? Location { get; set; }

    public List<Field>? Fields { get; set; }

    public List<Field>? Alarmfields { get; set; }

    public List<GroupedField>? GroupedFields { get; set; }

    public string TimeZoneId { get; set; } = "Romance Standard Time";

    public JwtSecurityToken? Token { get; set; }
    public string? Action { get; set; }
    public string? Rol { get; set; }
    public string? UserName { get; set; }

    #region Display

    public string? DisplayId { get; set; }

    #endregion
}