import type { ApiClient } from './request';
export type AvailabilityRule = {
    id: string;
    siteId: string;
    resourceId: string;
    serviceId: string | null;
    /** 0-6 (Sunday-Saturday). */
    weekday: number;
    /** HH:MM format. */
    startTime: string;
    /** HH:MM format. */
    endTime: string;
    minLeadMinutes: number;
    maxBookingNoticeMinutes: number;
    bufferMinutes: number;
    /** ISO timestamp. */
    createdAt: string;
    /** ISO timestamp. */
    updatedAt: string;
};
export type CreateAvailabilityRuleRequest = {
    id?: string;
    /** 0-6 (Sunday-Saturday). */
    weekday: number;
    /** HH:MM format. */
    startTime: string;
    /** HH:MM format. */
    endTime: string;
    minLeadMinutes?: number;
    maxBookingNoticeMinutes?: number;
    bufferMinutes?: number;
    serviceId?: string | null;
};
export type ListAvailabilityRulesResponse = {
    rules: AvailabilityRule[];
};
export type UpsertAvailabilityRuleResponse = {
    rule: AvailabilityRule;
};
export type AppointmentBlackout = {
    id: string;
    siteId: string;
    resourceId: string | null;
    /** ISO timestamp. */
    startsAt: string;
    /** ISO timestamp. */
    endsAt: string;
    reason: string | null;
    /** ISO timestamp. */
    createdAt: string;
};
export type CreateBlackoutRequest = {
    /** ISO timestamp. */
    startsAt: string;
    /** ISO timestamp. */
    endsAt: string;
    reason?: string | null;
};
export type ListBlackoutsResponse = {
    blackouts: AppointmentBlackout[];
};
export type CreateBlackoutResponse = {
    blackout: AppointmentBlackout;
};
export type DeleteAvailabilityRuleResponse = {
    success: boolean;
};
export type DeleteBlackoutResponse = {
    success: boolean;
};
export type TimeSlot = {
    /** ISO timestamp. */
    startAt: string;
    /** ISO timestamp. */
    endAt: string;
    resourceId: string;
};
export type GetAvailableSlotsQuery = {
    serviceId: string;
    resourceId?: string;
    startDate: string;
    endDate: string;
    timezone?: string;
};
export type GetAvailableSlotsResponse = {
    slots: TimeSlot[];
};
export declare function listAvailabilityRulesRequest(apiClient: ApiClient, siteId: string, resourceId: string, options?: RequestInit): Promise<AvailabilityRule[]>;
export declare function upsertAvailabilityRuleRequest(apiClient: ApiClient, siteId: string, resourceId: string, payload: CreateAvailabilityRuleRequest, options?: RequestInit): Promise<AvailabilityRule>;
export declare function deleteAvailabilityRuleRequest(apiClient: ApiClient, siteId: string, resourceId: string, ruleId: string, options?: RequestInit): Promise<void>;
export declare function listBlackoutsRequest(apiClient: ApiClient, siteId: string, resourceId: string, options?: RequestInit): Promise<AppointmentBlackout[]>;
export declare function createBlackoutRequest(apiClient: ApiClient, siteId: string, resourceId: string, payload: CreateBlackoutRequest, options?: RequestInit): Promise<AppointmentBlackout>;
export declare function deleteBlackoutRequest(apiClient: ApiClient, siteId: string, resourceId: string, blackoutId: string, options?: RequestInit): Promise<void>;
/**
 * Get available appointment slots for a service.
 *
 * GET filters are passed as query parameters.
 */
export declare function getAvailableSlotsRequest(apiClient: ApiClient, siteId: string, query: {
    serviceId: string;
    resourceId?: string;
    startDate: string;
    endDate: string;
    timezone?: string;
}, options?: RequestInit): Promise<TimeSlot[]>;
