import { z } from 'zod';
import { PaykitMetadata } from './metadata.mjs';

type RefundReason = string | null;
interface Refund {
    /**
     * The ID of the refund.
     */
    id: string;
    /**
     * The amount refunded.
     */
    amount: number;
    /**
     * The currency of the refund.
     */
    currency: string;
    /**
     * The reason for the refund.
     */
    reason: RefundReason;
    /**
     * The metadata of the refund.
     */
    metadata: PaykitMetadata | null;
}
declare const refundSchema: z.ZodObject<{
    id: z.ZodString;
    amount: z.ZodNumber;
    currency: z.ZodString;
    reason: z.ZodNullable<z.ZodString>;
    metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
}, "strip", z.ZodTypeAny, {
    reason: string | null;
    currency: string;
    id: string;
    metadata: Record<string, string> | null;
    amount: number;
}, {
    reason: string | null;
    currency: string;
    id: string;
    metadata: Record<string, string> | null;
    amount: number;
}>;
interface CreateRefundSchema<TProviderMetadata = Record<string, unknown>> extends Pick<Refund, 'amount' | 'reason' | 'metadata'> {
    /**
     * The unique identifier of the payment.
     */
    payment_id: string;
    /**
     * The provider metadata of the refund.
     */
    provider_metadata?: TProviderMetadata;
}
declare const createRefundSchema: z.ZodObject<{
    payment_id: z.ZodString;
    reason: z.ZodNullable<z.ZodString>;
    amount: z.ZodNumber;
    provider_metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
}, "strip", z.ZodTypeAny, {
    reason: string | null;
    metadata: Record<string, string> | null;
    amount: number;
    payment_id: string;
    provider_metadata?: Record<string, unknown> | undefined;
}, {
    reason: string | null;
    metadata: Record<string, string> | null;
    amount: number;
    payment_id: string;
    provider_metadata?: Record<string, unknown> | undefined;
}>;

export { type CreateRefundSchema, type Refund, type RefundReason, createRefundSchema, refundSchema };
