package com.agilex.healthcare.schedulingmanager.datalayer;


import com.agilex.healthcare.mobilehealthplatform.domain.PatientIdentifier;
import com.agilex.healthcare.mobilehealthplatform.domain.filter.datefilter.DateFilter;
import com.agilex.healthcare.schedulingmanager.domain.*;

public interface SchedulingDataLayer {

    public WaitListEntries getPatientWaitList (PatientIdentifier patientIdentifier, String facilityCode);

    public WaitListEntryDetail getWaitListEntryDetail(String waitListId, String facilityCode);

    public WaitListEntries getWaitListForFacility(String facilityCode, String waitListType);

    public WaitListEntry getWaitListEntry(String waitListId, String facilityCode);

    public BookAppointment bookPatientAppointment(BookAppointment bookAppointment);

    public BookedAppointments getPatientBookedAppointments(AppointmentSlotFilter appointmentSlotFilter);

    public CancelAppointment cancelAppointmentForPatient(CancelAppointment cancelAppointmentObject);

    //public WaitListEntry removeRecallEntryForPatient(WaitListEntry waitListEntry);

    public String updateNearEntryForPatient(PatientIdentifier patientIdentifier, String facilityCode, String status);

    public EwlUpdateEntry updateEWLEntry(EwlUpdateEntry ewlUpdateEntry);

    public AppointmentTimeSlots getClinicSchedulingDetail(AppointmentSlotFilter appointmentSlotFilter);

    public CancelReasons getCancelReasonList(String facilityCode);

    public SMConsults getConsultsBySpecialties(String services, String providerId, DateFilter dateFilter, String siteCode);

    public SMConsultServices getConsultServices(String siteCode);

    public SMConsultDetail getDetailsForConsult(String consultIen, String siteCode);

    public AppointmentTypes getAppointmentTypes(String siteCode);
    
    public SchedulingSpecialties getClinicsWithSpecialties(String siteCode);
}
