export interface BookingChangeModalCourt {
    id: string;
    name: string;
    formId?: string | number;
    form_id?: string | number;
    relationId?: string | number;
    relation_id?: string | number;
    relationType?: string;
    relation_type?: string;
    resourceId?: string | number;
    resource_id?: string | number;
    capacity?: number;
    likeStatus?: string;
    like_status?: string;
    formName?: string;
    form_name?: string;
    resourceName?: string;
    resource_name?: string;
    metadata?: Record<string, unknown>;
    raw?: Record<string, unknown>;
    [key: string]: unknown;
}
export interface BookingChangeModalCustomer {
    name: string;
    phone?: string;
    email?: string;
    memberId?: string;
}
export interface BookingChangeModalItem {
    id: string;
    courtId: string;
    date: string;
    startHour: number;
    endHour: number;
    name?: string;
    kind?: string;
    phone?: string;
    relation_id?: string | number;
    relation_type?: string;
    like_status?: string;
    is_all?: number;
    schedule_id?: string | number;
    sub_type?: string;
    number?: number;
    metadata?: Record<string, unknown>;
    resources?: Array<Record<string, unknown>>;
    raw?: Record<string, unknown>;
    [key: string]: unknown;
}
export interface BookingChangeModalDraft {
    targetCourtId: string;
    targetDate: string;
    targetHour: number;
}
export interface BookingChangeModalDetailData {
    customer?: BookingChangeModalCustomer | null;
    headerSummary?: {
        customerName?: string;
        resourceLabel?: string;
        [key: string]: unknown;
    };
    [key: string]: unknown;
}
export interface BookingChangeModalSubmitResource {
    form_id: string | number;
    relation_type: string;
    relation_id: string | number;
    capacity: number;
    like_status: string;
    metadata: Record<string, unknown>;
    children?: BookingChangeModalSubmitResource[];
}
export interface BookingChangeModalSubmitPayload {
    id: string | number;
    relation_id: string | number;
    like_status: string;
    relation_type: string;
    is_all: number;
    schedule_id: string | number;
    sub_type: string;
    select_date: string;
    number: number;
    metadata: Record<string, unknown>;
    resources: BookingChangeModalSubmitResource[];
    start_date: string;
    start_time: string;
    end_date: string;
    end_time: string;
    duration: number;
}
export interface BookingChangeModalOpenOptions extends BookingChangeModalDraft {
    item: BookingChangeModalItem;
    courts?: BookingChangeModalCourt[];
    visibleCourts?: BookingChangeModalCourt[];
    bookings?: BookingChangeModalItem[];
    hourSlots?: number[];
    firstTimelineHour?: number;
    endTimelineExclusive?: number;
    selectedCustomer?: BookingChangeModalCustomer | null;
    getBookingDetailData?: (item: BookingChangeModalItem, courts: BookingChangeModalCourt[]) => BookingChangeModalDetailData;
    formatHourLabel?: (hour: number) => string;
    isBusinessHour?: (hour: number) => boolean;
    hasConflict?: (bookings: BookingChangeModalItem[], targetCourtId: string, targetDate: string, startHour: number, endHour: number, excludeBookingId?: string) => boolean;
    onCustomerChange?: (context: {
        item: BookingChangeModalItem;
        customer: BookingChangeModalCustomer;
        draft: BookingChangeModalDraft;
        options: BookingChangeModalOpenOptions;
    }) => Promise<BookingChangeModalCustomer | null | void> | BookingChangeModalCustomer | null | void;
    title?: string;
    description?: string;
    confirmText?: string;
    cancelText?: string;
    closeOnBackdrop?: boolean;
    zIndex?: number;
    theme?: 'light' | 'dark';
    submitErrorMessage?: string;
    onSubmit?: (context: BookingChangeModalSubmitContext) => Promise<unknown> | unknown;
}
export interface BookingChangeModalResult {
    item: BookingChangeModalItem;
    original: BookingChangeModalDraft;
    draft: BookingChangeModalDraft;
    customer: BookingChangeModalCustomer;
    duration: number;
    nextEndHour: number;
    changed: boolean;
    submitPayload: BookingChangeModalSubmitPayload;
    submitResult?: unknown;
}
export interface BookingChangeModalSubmitContext {
    item: BookingChangeModalItem;
    original: BookingChangeModalDraft;
    draft: BookingChangeModalDraft;
    customer: BookingChangeModalCustomer;
    duration: number;
    nextEndHour: number;
    changed: boolean;
    submitPayload: BookingChangeModalSubmitPayload;
    options: BookingChangeModalOpenOptions;
}
export interface BookingChangeModalCloseReason {
    type: 'cancel' | 'backdrop' | 'escape' | 'programmatic-close' | 'replaced';
    message?: string;
}
export interface BookingChangeModalRendererProps {
    options: BookingChangeModalOpenOptions;
    onResolve: (result: BookingChangeModalResult) => void;
    onReject: (reason: BookingChangeModalCloseReason) => void;
}
