using adas_core.Domain.Enums;

namespace adas_core.Domain.Models.Filter;

/// <summary>
/// Represents a request that has been filtered or contains filtering criteria.
/// </summary>
/// <remarks>
/// This type serves as a container for request data that has been narrowed or constrained by a filtering process.
/// </remarks>
public class FilteredRequest
{
    #region Common region

    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }
    public string? PatientId { get; set; }
    public string? PatientNumber { get; set; }
    public string? Text { get; set; }
    public string? DeviceId { get; set; }
    public bool? InUse { get; set; }

    #endregion

    #region PUMP

    public PumpEnum.AlarmMode? AlarmMode { get; set; }
    public string? AlarmType { get; set; }
    public PumpEnum.Mode? PumpMode { get; set; }
    public PumpEnum.InfusingStatus? InfusingStatus { get; set; }
    public PumpEnum.Status? Status { get; set; }

    #endregion

    #region Treatment

    public List<string>? Observations { get; set; }

    public bool ActiveTreatments { get; set; }

    #endregion

    #region Medicines

    public string? MedicineName { get; set; }

    public string? MedicineCode { get; set; }

    public string? MedicineType { get; set; }

    public string? MedicineGroup { get; set; }

    #endregion

    #region User

    public string? Name { get; set; }
    public string? Email { get; set; }
    public string? UserName { get; set; }
    public StatusEnum.User UserStatus { get; set; }
    public string? UserType { get; set; }

    #endregion

    #region Patient

    public DateTime? StartAdmTime { get; set; }
    public DateTime? EndAdmTime { get; set; }

    public DateTime? StartDischargeTime { get; set; }
    public DateTime? EndDischargeTime { get; set; }

    public DateTime? StartLastObsTime { get; set; }
    public DateTime? EndLastObsTime { get; set; }

    public DateTime? StartCreationDateTime { get; set; }
    public DateTime? EndCreationDateTime { get; set; }

    public DateTime? StartUpDateTime { get; set; }
    public DateTime? EndUpDateTime { get; set; }

    public DateTime? StartBirthDate { get; set; }
    public DateTime? EndBirthDate { get; set; }

    #endregion

    #region Displays y PoC

    public string? UnitId { get; set; }
    public string? PocId { get; set; }
    public string? UnitName { get; set; }

    public DisplayConfigEnums.DisplayType? DisplayType { get; set; }
    public StatusEnum.PointOfCare? PointOfCareStatus { get; set; }

    #endregion
}