using adas_core.Domain.Models;
using adas_core.Domain.Models.DTO;
using adas_core.Domain.Models.MongoModels;
using MongoDB.Bson;

namespace adas_core.Application.Services.Interfaces;

public interface IAdminPanelService
{
    Task<bool> DeleteUnitById(ObjectId unitId);
    Task<Unit?> InsertUnit(Unit unit);

    #region Patient

    Task<Patient?> CreatePatient(AdmPanelRequest apiRequest);
    Task<Patient?> FindPatientByLocation(PatientLocation location);
    Task<Patient?> FindPatientByPatientNumber(string patientNumber);

    Task<Patient?> FindPatientById(ObjectId id);

    //List<person> FindAllPatient();
    Task<Patient?> FindPatient(AdmPanelRequest request);
    Task<UnitInfoDto?> GetUnitDependencyDto(Unit unit);

    Task<bool> UpdatePatientLocation(AdmPanelRequest request);
    Task<bool> UpdatePatientData(AdmPanelRequest request, Patient oldPatient);
    Task<bool> ArchivePatient(Patient patient);

    #endregion

    #region ConfigObservations
    Task<bool> CreateConfig(ConfigObservation configObservation);
    Task<bool> UpdateConfig(ConfigObservation configObservation);
    Task<bool> DeleteConfigObservationItem(ObjectId id);

    #endregion

    #region Medicienes

    Task<Medicine?> GetMedicineById(ObjectId medicineId);
    Task<Medicine?> PostMedicine(Medicine medicine);
    Task<Medicine?> UpdateMedicine(Medicine medicine);
    Task<bool> DeleteMedicineById(string medicineId);

    #endregion
}