import { appointmentStatus, appointmentType, contactName, meetingExternalLink, meetingLocation, meetingNotes, meetingTitle, timestamp, virtualMeetingService } from "./crm.types.js";
export type Appointment = {
    id?: string;
    status: appointmentStatus;
    type: appointmentType;
    timestamp: timestamp;
    contactName: contactName;
    contactEmail?: string;
    contactPhone?: string;
    employeeName?: string;
    employeeEmail?: string;
    employeePhone?: string;
    meetingTitle?: meetingTitle;
    meetingExternalLink?: meetingExternalLink;
    meetingLocation?: meetingLocation;
    meetingNotes?: meetingNotes;
    virtualMeetingService?: virtualMeetingService;
};
export interface CRMBackend {
    createEventToSms(appointment: Appointment): string | PromiseLike<string>;
    fetchAppointmentTypes(): Promise<string[]>;
    fetchAvailableSlots(timestamp: string, attendees: string[]): Promise<string[]>;
    bookAppointment(appointment: Appointment): Promise<string>;
    modifyAppointment(id: string, updatedInfo: Partial<Appointment>): Promise<Appointment>;
    findAppointmentByContactName(name: string): Promise<Appointment>;
    findAppointmentByTimestamp(timestamp: string): Promise<Appointment | null>;
    findAppointmentById(id: string): Promise<Appointment | null>;
}
export interface HubSpotApiResponse {
    archived: boolean;
    createdAt: string;
    id: string;
    properties: {
        hs_createdate: string;
        hs_internal_meeting_notes: string;
        hs_lastmodifieddate: string;
        hs_meeting_location: string;
        hs_meeting_source: string;
        hs_object_id: string;
        hs_object_source: string;
        hs_object_source_id: string;
        hs_object_source_label: string;
        hs_outcome_canceled_count: string;
        hs_outcome_completed_count: string;
        hs_outcome_no_show_count: string;
        hs_outcome_rescheduled_count: string;
        hs_outcome_scheduled_count: string;
        hs_time_to_book_meeting_from_first_contact: string;
        hs_timestamp: string;
    };
    updatedAt: string;
}
export interface FreeBusyResponse {
    kind: "calendar#freeBusy";
    timeMin: string;
    timeMax: string;
    groups: {
        (key: any): {
            errors: [
                {
                    domain: string;
                    reason: string;
                }
            ];
            calendars: [string];
        };
    };
    calendars: {
        (key: any): {
            errors: [
                {
                    domain: string;
                    reason: string;
                }
            ];
            busy: [
                {
                    start: string;
                    end: string;
                }
            ];
        };
    };
}
export interface GoogleCalendarEvent {
    summary: string;
    start: {
        dateTime: string;
        timeZone: string;
    };
    end: {
        dateTime: string;
        timeZone: string;
    };
    attendees: {
        email: string;
        [key: string]: any;
    }[];
    conferenceData: {
        createRequest: {
            requestId: string;
            conferenceSolutionKey: {
                type: string;
            };
        };
    };
}
//# sourceMappingURL=crm.interfaces.d.ts.map