using adas_core.Domain.Models;

namespace adas_core.Application.Repositories.Interfaces;

public interface IAppointmentArchiveRepository
{
    /// <summary>
    /// Asynchronously inserts a single patient appointment into the underlying data store.
    /// </summary>
    /// <param name="patientAppointment">The patient appointment entity to be persisted.</param>
    Task InsertOneAsync(PatientAppointment patientAppointment);
    /// <summary>
    /// Asynchronously deletes records that have a date earlier than the specified cutoff date.
    /// </summary>
    /// <param name="date">The cutoff date; records dated before this value will be removed.</param>
    Task DeleteBeforeDate(DateTime date);
    /// <summary>
    /// Inserts a batch of patient appointments asynchronously, typically as part of a bulk import or synchronization process.
    /// </summary>
    /// <param name="appointment">The collection of patient appointments to be inserted.</param>
    /// <returns>A task that represents the asynchronous insert operation, containing a long value that represents the result of the batch insertion.</returns>
    Task<long> InsertBatch(IEnumerable<PatientAppointment> appointment);
}