using adas_core.Domain.Models;
using adas_core.Domain.Models.Filter;
using adas_core.Domain.Models.MongoModels;
using adas_core.Domain.Models.Responses;
using MongoDB.Bson;
using MongoDB.Driver;

namespace adas_core.Application.Services.Interfaces;

public interface ITreatmentService : IApiRequestService
{
    Task Insert(PatientTreatment treatment);
    Task<bool> DeleteByPatientId(ObjectId id);
    Task DeleteById(ObjectId id);
    Task ArchiveByPatientId(ObjectId id);
    Task Archive(Patient patient);
    Task<bool> UpdateTreatment(PatientTreatment patientTreatment);
    Task UpdateManyObjectId(string nameId, ObjectId id, ObjectId oldId);
    Task<IEnumerable<PatientTreatment>> GetTreatmentsByPatientId(ObjectId id);
    Task<IEnumerable<PatientTreatment?>> GetActiveTreatmentsByPatient(ObjectId id);
    Task<IAsyncCursor<PatientTreatment>> FindByPatientIdAsync(ObjectId patientId);
    Task<IEnumerable<PatientTreatment>> FindByPatientId(ObjectId patientId);
    Task<List<PatientTreatment>> GetBolusTreatments(ObjectId patientId);
    Task<PaginationResponse<PatientTreatment>> GetPaginatedTreatments(PaginationFilter filter);
    Task<List<PatientTreatment>> GetActiveTreatmentsByPatientIdAndOrder(ObjectId patientId, string order);
}