using adas_core.Domain.Enums;
using adas_core.Domain.Models;
using adas_core.Domain.Models.DTO;
using adas_core.Domain.Models.MongoModels;
using adas_core.Domain.Models.Recording;
using Patient = adas_core.Domain.Models.MongoModels.Patient;
namespace adas_core.Application.Services.Interfaces;
public interface IRecordingService : IApiRequestService
{
///
/// Asynchronously sends a cancel recording request to the recording API for the specified patient and point of care.
///
/// The patient whose recording should be cancelled.
/// The point of care associated with the recording to be cancelled.
/// A task that represents the asynchronous operation, containing a boolean value indicating the outcome of the cancel recording request.
Task SendCancelRecordingToRecordingApi(Patient patient, PointOfCare poc);
///
/// Queues alarm recording data for the specified patient at the given point of care,
/// using the provided alarm details to be processed asynchronously.
///
/// The patient associated with the recording data.
/// The point of care where the recording originated.
/// The start date of the recording, if applicable.
/// The end date of the recording, if applicable.
/// The date of the event, if applicable.
/// The name of the alarm, if applicable.
/// The severity level of the alarm.
/// The description of the alarm, if applicable.
/// Indicates whether to start the recording (default is true).
/// The type of alarm (default is Manual).
Task SendRecordingDataToQueue(Patient patient, PointOfCare poc, DateTime? date, DateTime? endDate,
DateTime? eventDate, AlarmEnum.Name? alarmName, AlarmEnum.Severity severity, string? alarmDescription,
bool start = true, AlarmEnum.Type type = AlarmEnum.Type.Manual);
///
/// Asynchronously sends manual recording data for the specified patient at the given point of care, using the provided manual recording and a flag indicating whether to start the recording.
///
/// The patient whose recording data is being sent.
/// The point of care associated with the recording.
/// The manual recording payload to transmit.
/// A flag indicating whether the recording is being started or stopped.
Task SendRecordingData(Patient patient, PointOfCare poc, ManualRecording manualRecording, bool start);
///
/// Asynchronously sends automatic recording data for a patient at the specified point of care.
///
/// The patient associated with the automatic recording data.
/// The point of care where the recording was taken.
/// The automatic recording data to be sent.
/// A task that represents the asynchronous operation, containing a boolean indicating whether the data was sent successfully.
Task SendAutoRecordingData(Patient patient, PointOfCare poc, RecordingData automaticRecording);
///
/// Retrieves the list of recordings associated with the specified room.
///
/// The identifier of the room whose recordings are being requested.
/// A task that returns a list of for the room, or null if no recordings are available.
Task?> GetRecordings(int roomName);
}