import { APIClient, DataWrapper, type OAuthGrantRequest, type DataWrapperCtor } from '@awell-health/extensions-core';
import { type FindAppointmentsParams, type AppointmentInput, type AppointmentResponse, type ElationCollection, type PatientInput, type PatientResponse, type UpdatePatientInput, type Subscription, type SubscriptionRequest, type PhysicianResponse, type NonVisitNoteInput, type NonVisitNoteResponse, type GetLetterInputType, type GetLetterResponseType, type PostLetterInput, type PostLetterResponse, type CreateLabOrderInput, type CreateLabOrderResponse, type FindContactsResponse, type MessageThreadInput, type MessageThreadResponse, type addHistoryInput, type addHistoryResponse, type AddAllergyInputType, type AddAllergyResponseType, type CreateVisitNoteInputType, type CreateVisitNoteResponseType, type UpdateVisitNoteInputType, type PharmacyResponse, type AddVitalsInputType, type AddVitalsResponseType, type PostCareGapInput, type CareGapResponse, type CloseCareGapInput, type PostReferralOrderInput, type PostReferralOrderResponse, type GetReferralOrderInputType, type GetReferralOrderResponseType, type AddMessageToThreadInput } from './types';
import { type DeepPartial } from '../../src/lib/types';
import { type AxiosResponse } from 'axios';
export declare class ElationDataWrapper extends DataWrapper {
    findAppointments(params: FindAppointmentsParams): Promise<AppointmentResponse[]>;
    getAppointment(id: number): Promise<AppointmentResponse>;
    createAppointment(obj: Partial<AppointmentInput>): Promise<AppointmentResponse>;
    updateAppointment(id: number, obj: Partial<AppointmentInput>): Promise<AppointmentResponse>;
    getPatient(id: number): Promise<PatientResponse>;
    createPatient(obj: Partial<PatientInput>): Promise<AxiosResponse<PatientResponse>>;
    updatePatient(id: number, obj: Partial<UpdatePatientInput>): Promise<PatientResponse>;
    findSubscriptions(): Promise<Subscription[]>;
    createSubscription(obj: SubscriptionRequest): Promise<Subscription>;
    deleteSubscription(id: number): Promise<void>;
    getPhysician(id: number): Promise<PhysicianResponse>;
    getLetter(id: number): Promise<GetLetterResponseType>;
    getReferralOrder(id: number): Promise<GetReferralOrderResponseType>;
    findPhysicians({ params, }: {
        params?: {
            first_name?: string;
            last_name?: string;
            npi?: string;
        };
    }): Promise<ElationCollection<PhysicianResponse>>;
    getNonVisitNote(id: number): Promise<NonVisitNoteResponse>;
    createNonVisitNote(obj: NonVisitNoteInput): Promise<AxiosResponse<NonVisitNoteResponse>>;
    updateNonVisitNote(id: number, obj: Partial<NonVisitNoteInput>): Promise<NonVisitNoteResponse>;
    updateReferralOrder(id: number, obj: DeepPartial<PostReferralOrderInput>): Promise<PostReferralOrderResponse>;
    deleteNonVisitNote(id: number): Promise<void>;
    postLetter(obj: PostLetterInput): Promise<PostLetterResponse>;
    listContacts(obj: {
        npi: string;
    }): Promise<FindContactsResponse>;
    searchContacts(obj: {
        name: string;
    }): Promise<FindContactsResponse>;
    createLabOrder(obj: CreateLabOrderInput): Promise<CreateLabOrderResponse>;
    createMessageThread(obj: MessageThreadInput): Promise<MessageThreadResponse>;
    addMessageToThread(obj: AddMessageToThreadInput): Promise<MessageThreadResponse>;
    addHistory(obj: addHistoryInput): Promise<addHistoryResponse>;
    addAllergy(obj: AddAllergyInputType): Promise<AddAllergyResponseType>;
    createVisitNote(obj: CreateVisitNoteInputType): Promise<CreateVisitNoteResponseType>;
    updateVisitNote(id: number, obj: UpdateVisitNoteInputType): Promise<CreateVisitNoteResponseType>;
    addVitals(obj: AddVitalsInputType): Promise<AddVitalsResponseType>;
    getPharmacy(ncpdpId: string): Promise<PharmacyResponse>;
    createReferralOrder(obj: PostReferralOrderInput): Promise<PostReferralOrderResponse>;
    findPractices(): Promise<ElationCollection<any>>;
    createCareGap(obj: PostCareGapInput): Promise<CareGapResponse>;
    closeCareGap(obj: CloseCareGapInput): Promise<CareGapResponse>;
}
interface ElationAPIClientConstructorProps {
    authUrl: string;
    requestConfig: Omit<OAuthGrantRequest, 'grant_type'>;
    baseUrl: string;
}
export declare class ElationAPIClient extends APIClient<ElationDataWrapper> {
    readonly ctor: DataWrapperCtor<ElationDataWrapper>;
    constructor({ authUrl, requestConfig, ...opts }: ElationAPIClientConstructorProps);
    findAppointments(params: FindAppointmentsParams): Promise<AppointmentResponse[]>;
    getAppointment(id: number): Promise<AppointmentResponse>;
    createAppointment(obj: Partial<AppointmentInput>): Promise<AppointmentResponse>;
    updateAppointment(id: number, obj: Partial<AppointmentInput>): Promise<AppointmentResponse>;
    getPatient(id: number): Promise<PatientResponse>;
    createPatient(obj: Partial<PatientInput>): Promise<AxiosResponse<PatientResponse>>;
    updatePatient(id: number, obj: Partial<UpdatePatientInput>): Promise<PatientResponse>;
    findSubscriptions(): Promise<Subscription[]>;
    createSubscription(obj: SubscriptionRequest): Promise<Subscription>;
    deleteSubscription(id: number): Promise<void>;
    getPhysician(id: number): Promise<PhysicianResponse>;
    getLetter(id: GetLetterInputType): Promise<GetLetterResponseType>;
    getReferralOrder(id: GetReferralOrderInputType): Promise<GetReferralOrderResponseType>;
    findPhysicians({ params, }: {
        params?: {
            first_name?: string;
            last_name?: string;
            npi?: string;
        };
    }): Promise<ElationCollection<PhysicianResponse>>;
    getNonVisitNote(id: number): Promise<NonVisitNoteResponse>;
    createNonVisitNote(obj: NonVisitNoteInput): Promise<AxiosResponse<NonVisitNoteResponse>>;
    updateNonVisitNote(id: number, obj: Partial<NonVisitNoteInput>): Promise<NonVisitNoteResponse>;
    updateReferralOrder(id: number, obj: DeepPartial<PostReferralOrderInput>): Promise<PostReferralOrderResponse>;
    deleteNonVisitNote(id: number): Promise<void>;
    postNewLetter(obj: PostLetterInput): Promise<PostLetterResponse>;
    searchContactsByNpi(obj: {
        npi: string;
    }): Promise<FindContactsResponse>;
    searchContactsByName(obj: {
        name: string;
    }): Promise<FindContactsResponse>;
    createLabOrder(obj: CreateLabOrderInput): Promise<CreateLabOrderResponse>;
    addHistory(obj: addHistoryInput): Promise<addHistoryResponse>;
    createMessageThread(obj: MessageThreadInput): Promise<MessageThreadResponse>;
    addMessageToThread(obj: AddMessageToThreadInput): Promise<MessageThreadResponse>;
    addAllergy(obj: AddAllergyInputType): Promise<AddAllergyResponseType>;
    createVisitNote(obj: CreateVisitNoteInputType): Promise<CreateVisitNoteResponseType>;
    updateVisitNote(id: number, obj: UpdateVisitNoteInputType): Promise<CreateVisitNoteResponseType>;
    addVitals(obj: AddVitalsInputType): Promise<AddVitalsResponseType>;
    getPharmacy(ncpdpId: string): Promise<PharmacyResponse>;
    createReferralOrder(obj: PostReferralOrderInput): Promise<PostReferralOrderResponse>;
    findPractices(): Promise<ElationCollection<any>>;
    createCareGap(obj: PostCareGapInput): Promise<CareGapResponse>;
    closeCareGap(obj: CloseCareGapInput): Promise<CareGapResponse>;
}
export declare const makeAPIClient: (settings: Record<string, unknown>) => ElationAPIClient;
export {};
