import type { ApiClient } from './request';
import type { SensitiveCollectionConfirmationVersion, SensitiveCollectionMode } from '@riverbankcms/core';
import type { BookingSettingsResponse, UpdateBookingSettingsRequest, CreateCourseRequest, CreateCourseResponse, UpdateCourseRequest, UpdateCourseResponse, DeleteCourseResponse, DeleteCourseProgramResponse, DuplicateCourseRequest, DuplicateCourseResponse, AddCourseEnrollmentRequest, AddCourseEnrollmentResponse, AddEventOccurrenceAttendeeRequest, AddEventOccurrenceAttendeeResponse, UpdateCourseEnrollmentRequest, UpdateCourseEnrollmentResponse } from './types';
export type CreateAppointmentRequest = {
    formId: string;
    serviceId: string;
    resourceId?: string | null;
    startAt: string;
    endAt: string;
    customFields: Record<string, unknown>;
    timezone?: string;
};
export type AppointmentRecord = {
    id: string;
    siteId: string;
    serviceId: string;
    resourceId: string;
    customerId: string;
    startAt: string;
    endAt: string;
    timezone: string;
    status: "pending" | "confirmed" | "cancelled" | "no_show";
    source: string;
    metadata: Record<string, unknown>;
    formSubmissionJson: Record<string, unknown>;
    reminderScheduledAt: string | null;
    createdAt: string;
    updatedAt: string;
};
export type BookingCustomerRecord = {
    id: string;
    siteId: string;
    name: string | null;
    email: string | null;
    phone: string | null;
    timezone: string | null;
    metadata: Record<string, unknown>;
    createdAt: string;
    updatedAt: string;
};
export type CreateAppointmentResponse = {
    appointment: AppointmentRecord;
    customer: BookingCustomerRecord;
};
export type BookingRequirementTargetType = "appointment_service" | "event_series" | "course";
export type BookingRequirementValidityPolicy = {
    type: "never";
} | {
    type: "months";
    months: number;
};
export type BookingQuestionFormSummary = {
    id: string;
    name: string;
    slug: string;
    shape: "short-form" | "detailed-questionnaire";
};
export type ConsentRequirementConfig = {
    enabled: boolean;
    title: string;
    agreementText: string;
    checkboxLabel: string;
    validityPolicy: BookingRequirementValidityPolicy;
};
export declare const BOOKING_QUESTION_REQUIREMENT_SCOPES: readonly ["before_booking_booking_level", "after_booking_due_by_participant"];
export type BookingQuestionRequirementScope = (typeof BOOKING_QUESTION_REQUIREMENT_SCOPES)[number];
export declare function isAfterBookingQuestionRequirementScope(scope: BookingQuestionRequirementScope): scope is "after_booking_due_by_participant";
export declare function isBeforeBookingQuestionRequirementScope(scope: BookingQuestionRequirementScope): scope is "before_booking_booking_level";
export type BookingQuestionsRequirementConfig = {
    enabled: boolean;
    formId: string | null;
    sensitiveCollectionMode: SensitiveCollectionMode;
    sensitiveCollectionConfirmationVersion: SensitiveCollectionConfirmationVersion | null;
    scope: BookingQuestionRequirementScope;
    dueOffsetMinutes: number | null;
    reminderOffsetMinutes: number | null;
    reuseMode: "ask_again" | "prefill_if_valid" | "accept_if_valid";
    validityPolicy: BookingRequirementValidityPolicy;
};
export type BookingRequirementConfigRequest = {
    targetType: BookingRequirementTargetType;
    targetId: string;
    consent: ConsentRequirementConfig;
    bookingQuestions: BookingQuestionsRequirementConfig;
};
export type BookingRequirementConfigResponse = BookingRequirementConfigRequest;
type BookingSettingsResult = BookingSettingsResponse['settings'];
export declare function getBookingSettingsRequest(apiClient: ApiClient, siteId: string, options?: RequestInit): Promise<BookingSettingsResult>;
export declare function updateBookingSettingsRequest(apiClient: ApiClient, siteId: string, payload: UpdateBookingSettingsRequest, options?: RequestInit): Promise<BookingSettingsResult>;
export declare function createAppointmentRequest(apiClient: ApiClient, siteId: string, payload: CreateAppointmentRequest, options?: RequestInit): Promise<CreateAppointmentResponse>;
export declare function createCourseRequest(apiClient: ApiClient, siteId: string, payload: CreateCourseRequest, options?: RequestInit): Promise<CreateCourseResponse>;
export declare function updateCourseRequest(apiClient: ApiClient, siteId: string, courseId: string, payload: UpdateCourseRequest, options?: RequestInit): Promise<UpdateCourseResponse>;
export declare function deleteCourseRequest(apiClient: ApiClient, siteId: string, courseId: string, options?: RequestInit): Promise<DeleteCourseResponse>;
export declare function deleteCourseProgramRequest(apiClient: ApiClient, siteId: string, programId: string, options?: RequestInit): Promise<DeleteCourseProgramResponse>;
export declare function duplicateCourseRequest(apiClient: ApiClient, siteId: string, courseId: string, payload: DuplicateCourseRequest, options?: RequestInit): Promise<DuplicateCourseResponse>;
export declare function addCourseEnrollmentRequest(apiClient: ApiClient, siteId: string, courseId: string, payload: AddCourseEnrollmentRequest, options?: RequestInit): Promise<AddCourseEnrollmentResponse>;
export declare function updateCourseEnrollmentRequest(apiClient: ApiClient, siteId: string, courseId: string, enrollmentId: string, payload: UpdateCourseEnrollmentRequest, options?: RequestInit): Promise<UpdateCourseEnrollmentResponse>;
export declare function addEventOccurrenceAttendeeRequest(apiClient: ApiClient, siteId: string, seriesId: string, occurrenceId: string, payload: AddEventOccurrenceAttendeeRequest, options?: RequestInit): Promise<AddEventOccurrenceAttendeeResponse>;
export {};
