using adas_core.Domain.Models;
using adas_core.Domain.Models.MongoModels;
using MongoDB.Bson;

namespace adas_core.Application.Services.Interfaces;

public interface IRecordingAlertService : IApiRequestService
{
    /// <summary>
    /// Retrieves the most recent patient recording alerts for the specified patient.
    /// </summary>
    /// <param name="patientId">The identifier of the patient whose recording alerts are being queried.</param>
    /// <param name="num">The maximum number of most recent recording alerts to return. Defaults to 2.</param>
    /// <returns>A task representing the asynchronous operation, containing a list of the patient's most recent recording alerts.</returns>
    Task<List<PatientRecordingAlert>> FindLastRecordingAlert(ObjectId patientId, int num = 2);
    /// <summary>
    /// Deletes records associated with the specified patient identifier.
    /// </summary>
    /// <param name="id">The unique identifier of the patient whose related records should be removed.</param>
    Task DeleteByPatientId(ObjectId id);
    /// <summary>
    /// Asynchronously archives the specified patient, moving their record out of the active set.
    /// </summary>
    /// <param name="patient">The patient to archive.</param>
    Task Archive(Patient patient);
    /// <summary>
    /// Archives the records associated with the specified patient identifier.
    /// </summary>
    /// <param name="id">The <see cref="ObjectId"/> identifying the patient whose related records should be archived.</param>
    Task ArchiveByPatientId(ObjectId id);

    /// <summary>
    /// Updates multiple records by replacing the <paramref name="oldId"/> with the new <paramref name="id"/>
    /// in entries identified by <paramref name="nameId"/>.
    /// </summary>
    /// <param name="nameId">The identifier used to select the target records to update.</param>
    /// <param name="id">The new ObjectId value to assign to the matching records.</param>
    /// <param name="oldId">The existing ObjectId value to be replaced in the matching records.</param>
    Task UpdateManyObjectId(string nameId, ObjectId id, ObjectId oldId);
}