import type { BookingDepositRefundPolicy, BookingFlexibleBalanceConfig, BookingFlexibleBalanceDueDateRule, BookingInstalmentPlanConfig } from "@riverbankcms/core";
import { z } from "zod";
export type BlockBookingInstalmentPlan = BookingInstalmentPlanConfig;
export type BlockBookingFlexibleBalanceConfig = BookingFlexibleBalanceConfig;
export type BlockBookingFlexibleBalanceDueDateRule = BookingFlexibleBalanceDueDateRule;
export type BlockBookingDepositRefundPolicy = BookingDepositRefundPolicy;
export type { BookingDepositRefundPolicy, BookingFlexibleBalanceConfig, BookingFlexibleBalanceDueDateRule, BookingInstalmentPlanConfig, };
export type BlockBookingPaymentCollectionOption = {
    kind: "upfront";
} | {
    kind: "deferred_manual";
} | {
    kind: "instalment_plan";
    plan: BlockBookingInstalmentPlan;
} | {
    kind: "flexible_balance";
    config: BlockBookingFlexibleBalanceConfig;
};
export type BlockBookingPaymentTerms = {
    allowedOptions: BlockBookingPaymentCollectionOption[];
};
export declare const bookingDepositRefundPolicySchema: z.ZodEnum<{
    refundable: "refundable";
    non_refundable: "non_refundable";
}>;
export declare const bookingInstalmentPlanSchema: z.ZodUnion<readonly [z.ZodObject<{
    kind: z.ZodLiteral<"deposit_plus_one_remainder">;
    depositAmountCents: z.ZodNumber;
    depositRefundability: z.ZodEnum<{
        refundable: "refundable";
        non_refundable: "non_refundable";
    }>;
    remainderDueCount: z.ZodNumber;
    intervalUnit: z.ZodEnum<{
        month: "month";
        day: "day";
        week: "week";
    }>;
}, z.core.$strip>, z.ZodObject<{
    kind: z.ZodLiteral<"deposit_plus_scheduled_instalments">;
    depositAmountCents: z.ZodNumber;
    depositRefundability: z.ZodEnum<{
        refundable: "refundable";
        non_refundable: "non_refundable";
    }>;
    instalmentCount: z.ZodNumber;
    intervalCount: z.ZodNumber;
    intervalUnit: z.ZodEnum<{
        month: "month";
        day: "day";
        week: "week";
    }>;
}, z.core.$strip>, z.ZodObject<{
    kind: z.ZodLiteral<"equal_scheduled_instalments">;
    instalmentCount: z.ZodNumber;
    intervalCount: z.ZodNumber;
    intervalUnit: z.ZodEnum<{
        month: "month";
        day: "day";
        week: "week";
    }>;
}, z.core.$strip>]>;
export declare const bookingFlexibleBalanceDueDateRuleSchema: z.ZodUnion<readonly [z.ZodObject<{
    kind: z.ZodLiteral<"relative_to_start_date">;
    daysBeforeStart: z.ZodNumber;
}, z.core.$strip>, z.ZodObject<{
    kind: z.ZodLiteral<"fixed_calendar_date">;
    dueAt: z.ZodString;
}, z.core.$strip>]>;
export declare const bookingFlexibleBalanceConfigSchema: z.ZodObject<{
    upfrontAmountCents: z.ZodNumber;
    dueDateRule: z.ZodUnion<readonly [z.ZodObject<{
        kind: z.ZodLiteral<"relative_to_start_date">;
        daysBeforeStart: z.ZodNumber;
    }, z.core.$strip>, z.ZodObject<{
        kind: z.ZodLiteral<"fixed_calendar_date">;
        dueAt: z.ZodString;
    }, z.core.$strip>]>;
    depositRefundability: z.ZodEnum<{
        refundable: "refundable";
        non_refundable: "non_refundable";
    }>;
}, z.core.$strip>;
export declare const blockBookingPaymentCollectionOptionSchema: z.ZodUnion<readonly [z.ZodObject<{
    kind: z.ZodLiteral<"upfront">;
}, z.core.$strip>, z.ZodObject<{
    kind: z.ZodLiteral<"deferred_manual">;
}, z.core.$strip>, z.ZodObject<{
    kind: z.ZodLiteral<"instalment_plan">;
    plan: z.ZodUnion<readonly [z.ZodObject<{
        kind: z.ZodLiteral<"deposit_plus_one_remainder">;
        depositAmountCents: z.ZodNumber;
        depositRefundability: z.ZodEnum<{
            refundable: "refundable";
            non_refundable: "non_refundable";
        }>;
        remainderDueCount: z.ZodNumber;
        intervalUnit: z.ZodEnum<{
            month: "month";
            day: "day";
            week: "week";
        }>;
    }, z.core.$strip>, z.ZodObject<{
        kind: z.ZodLiteral<"deposit_plus_scheduled_instalments">;
        depositAmountCents: z.ZodNumber;
        depositRefundability: z.ZodEnum<{
            refundable: "refundable";
            non_refundable: "non_refundable";
        }>;
        instalmentCount: z.ZodNumber;
        intervalCount: z.ZodNumber;
        intervalUnit: z.ZodEnum<{
            month: "month";
            day: "day";
            week: "week";
        }>;
    }, z.core.$strip>, z.ZodObject<{
        kind: z.ZodLiteral<"equal_scheduled_instalments">;
        instalmentCount: z.ZodNumber;
        intervalCount: z.ZodNumber;
        intervalUnit: z.ZodEnum<{
            month: "month";
            day: "day";
            week: "week";
        }>;
    }, z.core.$strip>]>;
}, z.core.$strip>, z.ZodObject<{
    kind: z.ZodLiteral<"flexible_balance">;
    config: z.ZodObject<{
        upfrontAmountCents: z.ZodNumber;
        dueDateRule: z.ZodUnion<readonly [z.ZodObject<{
            kind: z.ZodLiteral<"relative_to_start_date">;
            daysBeforeStart: z.ZodNumber;
        }, z.core.$strip>, z.ZodObject<{
            kind: z.ZodLiteral<"fixed_calendar_date">;
            dueAt: z.ZodString;
        }, z.core.$strip>]>;
        depositRefundability: z.ZodEnum<{
            refundable: "refundable";
            non_refundable: "non_refundable";
        }>;
    }, z.core.$strip>;
}, z.core.$strip>]>;
export declare const blockBookingPaymentTermsSchema: z.ZodObject<{
    allowedOptions: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
        kind: z.ZodLiteral<"upfront">;
    }, z.core.$strip>, z.ZodObject<{
        kind: z.ZodLiteral<"deferred_manual">;
    }, z.core.$strip>, z.ZodObject<{
        kind: z.ZodLiteral<"instalment_plan">;
        plan: z.ZodUnion<readonly [z.ZodObject<{
            kind: z.ZodLiteral<"deposit_plus_one_remainder">;
            depositAmountCents: z.ZodNumber;
            depositRefundability: z.ZodEnum<{
                refundable: "refundable";
                non_refundable: "non_refundable";
            }>;
            remainderDueCount: z.ZodNumber;
            intervalUnit: z.ZodEnum<{
                month: "month";
                day: "day";
                week: "week";
            }>;
        }, z.core.$strip>, z.ZodObject<{
            kind: z.ZodLiteral<"deposit_plus_scheduled_instalments">;
            depositAmountCents: z.ZodNumber;
            depositRefundability: z.ZodEnum<{
                refundable: "refundable";
                non_refundable: "non_refundable";
            }>;
            instalmentCount: z.ZodNumber;
            intervalCount: z.ZodNumber;
            intervalUnit: z.ZodEnum<{
                month: "month";
                day: "day";
                week: "week";
            }>;
        }, z.core.$strip>, z.ZodObject<{
            kind: z.ZodLiteral<"equal_scheduled_instalments">;
            instalmentCount: z.ZodNumber;
            intervalCount: z.ZodNumber;
            intervalUnit: z.ZodEnum<{
                month: "month";
                day: "day";
                week: "week";
            }>;
        }, z.core.$strip>]>;
    }, z.core.$strip>, z.ZodObject<{
        kind: z.ZodLiteral<"flexible_balance">;
        config: z.ZodObject<{
            upfrontAmountCents: z.ZodNumber;
            dueDateRule: z.ZodUnion<readonly [z.ZodObject<{
                kind: z.ZodLiteral<"relative_to_start_date">;
                daysBeforeStart: z.ZodNumber;
            }, z.core.$strip>, z.ZodObject<{
                kind: z.ZodLiteral<"fixed_calendar_date">;
                dueAt: z.ZodString;
            }, z.core.$strip>]>;
            depositRefundability: z.ZodEnum<{
                refundable: "refundable";
                non_refundable: "non_refundable";
            }>;
        }, z.core.$strip>;
    }, z.core.$strip>]>>;
}, z.core.$strip>;
