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

namespace adas_core.Application.Services.Interfaces;

public interface IMedicineService
{
    Task<Medicine?> GetByCode(string code);
    Task<List<Medicine>> GetByCodeOrNote(List<string> codeNote);
    Task<Medicine?> GetByName(string name);
    Task<IEnumerable<Medicine>> GetMedicinesOfTreatments(IEnumerable<PatientTreatment?> treatments);
    Task<IEnumerable<Medicine>> GetActiveMedicinesByPatient(ObjectId patientId);
    Task<PaginationResponse<Medicine>> GetPaginatedMedicines(PaginationFilter filter);
    Task<List<Medicine>> GetAll();
    Task<Medicine?> GetMedicineById(ObjectId medicineId);
    Task<Medicine?> PostMedicine(Medicine medicine);
    Task<Medicine?> UpdateMedicine(Medicine medicine);
    Task DeleteMedicineById(ObjectId medicineId);
    Task<List<string>> GetAllTypes();
    Task<List<string>> GetAllGroups();
    Task<List<string>> GetAllNames();
    Task<List<string>> GetAllCodes();
}