using adas_core.Domain.Models.Masters;
using MongoDB.Bson;
namespace adas_core.Domain.Models.MongoModels;
///
/// Represents an admission, typically encapsulating data and behavior related to the process of admitting an entity, such as a student or patient, into an institution or system.
///
public class Admission
{
public ObjectId Id { get; set; }
public DateTime AdmissionDate { get; set; }
public string Nhc { get; set; } = string.Empty;
public ObjectId UnitId { get; set; }
public ObjectId? PointOfCareId { get; set; }
public Person? Person { get; set; }
public OptionList? Origin { get; set; }
public string? OriginAux { get; set; }
public OptionList? Diagnosis { get; set; }
public string? DiagnosisAux { get; set; }
public List? Allergies { get; set; }
public OptionList? Insulation { get; set; }
public List? LanguageBarrier { get; set; }
public OptionList? PassiveSitting { get; set; }
#region UnMap
public PatientLocation? PatientLocation { get; set; }
#endregion
///
/// Returns a human-readable string representation of the Admission, conditionally including NHC, Person, Admission Date, location, Origin, Diagnosis, and any associated Allergies only when they are present.
///
/// A formatted string in the form "Admission [...]" summarizing the Admission's key properties.
public override string ToString()
{
List items = [];
if (!string.IsNullOrEmpty(Nhc)) items.Add($"NHC: {Nhc}");
if (Person != null) items.Add($", Person: {Person}");
items.Add($"Admission Date: {AdmissionDate}");
if (PointOfCareId != null) items.Add($"Location: {PointOfCareId}");
if (PatientLocation != null) items.Add($"Location: {PatientLocation}");
if (Origin != null) items.Add($", Origin: {Origin.Name}");
if (Diagnosis != null) items.Add($", Diagnosis; {Diagnosis.Name}");
if (Allergies != null)
{
items.Add("Allergies:");
Allergies.ForEach(a => items.Add($", Allergy; {a.Name}"));
}
return "Admission [" + string.Join(", ", items) + "]";
}
}