using adas_core.Domain.Enums;
using adas_core.Domain.Models.MongoModels;
using MongoDB.Bson;
using LightBeacon = adas_core.Domain.Models.MongoModels.LightBeacon;

namespace adas_core.Domain.Models.DTO;

/// <summary>
/// Represents a data transfer object for point-of-care information, used to transfer point-of-care data between application layers or services.
/// </summary>
public class PointOfCareDto
{
   
    public ObjectId Id { get; set; }
    public string Room { get; set; } = string.Empty;
    public string Bed { get; set; } = string.Empty;
    public string? Hall { get; set; } = string.Empty;
    public ObjectId UnitId { get; set; }
    public PointOfCareConfigurationDto? Configuration { get; set; }
    public StatusEnum.PointOfCare Status { get; set; }
    public ObjectId? AdmissionId { get; set; }

    #region Unmap

    public string UnitName { get; set; } = string.Empty;
    public Unit? Unit { get; set; }
    public PatientLocation Location => new(UnitName, Bed, Room);
    public List<PatientObservation> Observations { get; set; } = [];
    public bool? HasPatient { get; set; }
    public ObjectId? Patientid { get; set; }
    public Patient? Patient { get; set; }
    public bool? IsActive { get; set; }
    public bool? IsVisible { get; set; }
    public Admission? Admission { get; set; }

    #endregion
}
/// <summary>
/// Represents a data transfer object (DTO) for point-of-care configuration settings, used to transfer configuration data between layers or systems.
/// </summary>
public class PointOfCareConfigurationDto
{
    public List<LightBeacon> BeaconList { get; set; } = [];
    public List<Camera> CameraList { get; set; } = [];
    public List<Relay>? RelayList { get; set; }
    public string? Type { get; set; }

    // Esta parte hay que tenerla en cuenta al momento de lanzar las grabaciones automaticas y manuales para la API de OR
    // OR espera recibir roomId
    public int? Id { get; set; }
}