using adas_core.Domain.Models.Masters;
using adas_core.Domain.Models.MongoModels;
using MongoDB.Bson;
namespace adas_core.Application.Services.Interfaces;
public interface IPatientCarePlanService
{
///
/// Retrieves a list of patient care plans associated with the specified patient identifier.
///
/// The unique identifier of the patient whose care plans are being retrieved.
/// A task that represents the asynchronous operation, containing a list of records for the given patient.
Task> FindByPatientId(ObjectId patientId);
///
/// Retrieves a list of patient care plans associated with the specified user identifier.
///
/// The unique identifier of the user whose patient care plans are being retrieved.
/// A task that represents the asynchronous operation. The task result contains a list of patient care plans associated with the user.
Task> FindByUserId(ObjectId userId);
///
/// Retrieves all patient care plans from the system.
///
/// A task containing a list of all records.
Task> FindAll();
///
/// Asynchronously inserts a single patient care plan into the underlying data store.
///
/// The patient care plan to insert.
Task InsertOneAsync(PatientCarePlan patientCarePlan);
///
/// Archives the care plan associated with a finished procedure for the specified patient, processing the provided list of items to be archived.
///
/// The patient whose procedure has been completed and whose care plan should be archived.
/// The collection of option list items to be archived as part of the care plan archival process.
Task ArchiveCarePlanFromJob(Patient patientWithFinishedProcedure, List itemsToArchive);
///
/// Asynchronously archives records associated with the specified patient identifier.
///
/// The unique identifier of the patient whose records are to be archived.
Task ArchiveByPatientId(ObjectId patientid);
///
/// Updates the ObjectId references from the specified old identifier to a new one across multiple records associated with the given patient.
///
/// The string identifier of the patient whose related records will be updated.
/// The ObjectId of the patient used to locate the records to update.
/// The existing ObjectId value to be replaced in the matched records.
Task UpdateManyObjectId(string patientid, ObjectId patientId, ObjectId oldId);
}