using MongoDB.Bson;
using MongoDB.Driver;
using adas_core.Domain.Models.Pumps;

namespace adas_core.Application.Repositories.Interfaces
{
    public interface IPumpArchiveRepository
    {
        /// <summary>
        /// Devuelve la colección subyacente
        /// </summary>
        IMongoCollection<PumpObservation> Collection { get; }

        /// <summary>
        /// Inserta una observación de bomba en la colección de archivo.
        /// </summary>
        /// <!-- aidoc-review:v1 severity=medium kind=missing_param
        ///      "The <param> for 'obs' (PumpObservation) is not documented." -->
        Task InsertAsync(PumpObservation obs);

        /// <summary>
        /// Inserta múltiples observaciones en la colección de archivo.
        /// </summary>
        /// <!-- aidoc:v1 sig=0c99da2 -->
        Task InsertManyAsync(IEnumerable<PumpObservation> observations);

        /// <summary>
        /// Búsqueda por paciente para auditoría o restauración.
        /// </summary>
        /// <!-- aidoc:v1 sig=5956bf6 -->
        Task<IEnumerable<PumpObservation>> FindByPatientIdAsync(ObjectId patientId,
            DateTime? from = null, DateTime? to = null, int? limit = null);
    }
}