using Hl7.Fhir.Model;
using FhirPatient = Hl7.Fhir.Model.Patient;
using FhirEncounter = Hl7.Fhir.Model.Encounter;
using FhirObservation = Hl7.Fhir.Model.Observation;

public interface IFhirService
{
    Task<FhirPatient?> GetPatientAsync(Guid id);
    Task<Bundle> SearchPatientsAsync(string? name, string? birthdate, string? identifier, int count, int offset);

    Task<FhirEncounter?> GetEncounterAsync(Guid id);
    Task<Bundle> SearchEncountersAsync(string? patient, string? status, string? date, int count, int offset);

    Task<FhirObservation?> GetObservationAsync(Guid id);
    Task<Bundle> SearchObservationsAsync(
        string? patient, string? code, string? date,
        string? category, string? encounter, int count, int offset);

    Task<Bundle?> GetPatientEverythingAsync(Guid patientId);

    CapabilityStatement GetCapabilityStatement();
}