import { z } from 'zod';
import { OverrideProps } from '../types.mjs';
import { BillingInfo } from './billing.mjs';
import { Payee } from './customer.mjs';
import { PaykitMetadata } from './metadata.mjs';

/**
 * @description Payment statuses
 * PENDING - Payment is created but awaiting processing
 * PROCESSING - Payment is being processed by the provider,
 * REQUIRES_ACTION - Requires user action (3DS, bank verification, etc.)
 * REQUIRES_CAPTURE - Authorized, awaiting manual capture
 * SUCCEEDED - Payment completed successfully
 * CANCELED - Payment canceled before completion
 * FAILED - Payment attempt failed
 */
declare const paymentStatusSchema: z.ZodEnum<["pending", "processing", "requires_action", "requires_capture", "succeeded", "canceled", "failed"]>;
type PaymentStatus = z.infer<typeof paymentStatusSchema>;
interface Payment {
    /**
     * The unique identifier of the payment.
     */
    id: string;
    /**
     * The amount of the payment.
     */
    amount: number;
    /**
     * The currency of the payment.
     */
    currency: string;
    /**
     * The payee of the payment.
     */
    customer: Payee | null;
    /**
     * The status of the payment.
     */
    status: PaymentStatus;
    /**
     * The metadata of the payment.
     */
    metadata: PaykitMetadata;
    /**
     * The item ID of the payment.
     */
    item_id: string | null;
    /**
     *
     * Whether the payment requires action.
     */
    requires_action: boolean;
    /**
     * Whether the payment requires capture.
     */
    payment_url: string | null;
}
declare const paymentSchema: z.ZodObject<{
    id: z.ZodString;
    amount: z.ZodNumber;
    currency: z.ZodString;
    customer: z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        email: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        email: string;
    }, {
        email: string;
    }>, z.ZodObject<{
        id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    }, "strip", z.ZodTypeAny, {
        id: string | number;
    }, {
        id: string | number;
    }>]>>;
    status: z.ZodEnum<["pending", "processing", "requires_action", "requires_capture", "succeeded", "canceled", "failed"]>;
    metadata: z.ZodRecord<z.ZodString, z.ZodString>;
    item_id: z.ZodNullable<z.ZodString>;
    requires_action: z.ZodBoolean;
    payment_url: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    status: "canceled" | "pending" | "requires_action" | "processing" | "requires_capture" | "succeeded" | "failed";
    currency: string;
    id: string;
    metadata: Record<string, string>;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    item_id: string | null;
    requires_action: boolean;
    payment_url: string | null;
}, {
    status: "canceled" | "pending" | "requires_action" | "processing" | "requires_capture" | "succeeded" | "failed";
    currency: string;
    id: string;
    metadata: Record<string, string>;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    item_id: string | null;
    requires_action: boolean;
    payment_url: string | null;
}>;
interface CreatePaymentSchema<TProviderMetadata = Record<string, unknown>> extends OverrideProps<Omit<Payment, 'id' | 'status' | 'requires_action' | 'payment_url'>, {
    metadata?: Record<string, unknown>;
}> {
    /**
     * The provider specific params of the payment.
     */
    provider_metadata?: TProviderMetadata;
    /**
     * The shipping info of the payment.
     */
    billing?: BillingInfo;
    /**
     * The capture method of the payment.
     */
    capture_method: 'automatic' | 'manual';
}
declare const createPaymentSchema: z.ZodObject<Omit<{
    id: z.ZodString;
    amount: z.ZodNumber;
    currency: z.ZodString;
    customer: z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        email: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        email: string;
    }, {
        email: string;
    }>, z.ZodObject<{
        id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    }, "strip", z.ZodTypeAny, {
        id: string | number;
    }, {
        id: string | number;
    }>]>>;
    status: z.ZodEnum<["pending", "processing", "requires_action", "requires_capture", "succeeded", "canceled", "failed"]>;
    metadata: z.ZodRecord<z.ZodString, z.ZodString>;
    item_id: z.ZodNullable<z.ZodString>;
    requires_action: z.ZodBoolean;
    payment_url: z.ZodNullable<z.ZodString>;
}, "status" | "id" | "metadata" | "requires_action" | "payment_url"> & {
    metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    provider_metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    billing: z.ZodOptional<z.ZodObject<{
        address: z.ZodObject<{
            name: z.ZodString;
            line1: z.ZodString;
            line2: z.ZodOptional<z.ZodDefault<z.ZodString>>;
            city: z.ZodString;
            state: z.ZodOptional<z.ZodString>;
            postal_code: z.ZodString;
            country: z.ZodString;
            phone: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            name: string;
            line1: string;
            city: string;
            postal_code: string;
            country: string;
            line2?: string | undefined;
            state?: string | undefined;
            phone?: string | undefined;
        }, {
            name: string;
            line1: string;
            city: string;
            postal_code: string;
            country: string;
            line2?: string | undefined;
            state?: string | undefined;
            phone?: string | undefined;
        }>;
        carrier: z.ZodOptional<z.ZodString>;
        currency: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        address: {
            name: string;
            line1: string;
            city: string;
            postal_code: string;
            country: string;
            line2?: string | undefined;
            state?: string | undefined;
            phone?: string | undefined;
        };
        currency: string;
        carrier?: string | undefined;
    }, {
        address: {
            name: string;
            line1: string;
            city: string;
            postal_code: string;
            country: string;
            line2?: string | undefined;
            state?: string | undefined;
            phone?: string | undefined;
        };
        currency: string;
        carrier?: string | undefined;
    }>>;
    capture_method: z.ZodEnum<["automatic", "manual"]>;
}, "strip", z.ZodTypeAny, {
    currency: string;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    item_id: string | null;
    capture_method: "manual" | "automatic";
    metadata?: Record<string, unknown> | undefined;
    billing?: {
        address: {
            name: string;
            line1: string;
            city: string;
            postal_code: string;
            country: string;
            line2?: string | undefined;
            state?: string | undefined;
            phone?: string | undefined;
        };
        currency: string;
        carrier?: string | undefined;
    } | undefined;
    provider_metadata?: Record<string, unknown> | undefined;
}, {
    currency: string;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    item_id: string | null;
    capture_method: "manual" | "automatic";
    metadata?: Record<string, unknown> | undefined;
    billing?: {
        address: {
            name: string;
            line1: string;
            city: string;
            postal_code: string;
            country: string;
            line2?: string | undefined;
            state?: string | undefined;
            phone?: string | undefined;
        };
        currency: string;
        carrier?: string | undefined;
    } | undefined;
    provider_metadata?: Record<string, unknown> | undefined;
}>;
interface UpdatePaymentSchema<TProviderMetadata = Record<string, unknown>> extends Partial<Omit<Payment, 'id' | 'status'>> {
    provider_metadata?: TProviderMetadata;
}
declare const updatePaymentSchema: z.ZodObject<{
    id: z.ZodOptional<z.ZodString>;
    amount: z.ZodOptional<z.ZodNumber>;
    currency: z.ZodOptional<z.ZodString>;
    customer: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        email: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        email: string;
    }, {
        email: string;
    }>, z.ZodObject<{
        id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    }, "strip", z.ZodTypeAny, {
        id: string | number;
    }, {
        id: string | number;
    }>]>>>;
    status: z.ZodOptional<z.ZodEnum<["pending", "processing", "requires_action", "requires_capture", "succeeded", "canceled", "failed"]>>;
    metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    item_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    requires_action: z.ZodOptional<z.ZodBoolean>;
    payment_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
} & {
    provider_metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, "strip", z.ZodTypeAny, {
    status?: "canceled" | "pending" | "requires_action" | "processing" | "requires_capture" | "succeeded" | "failed" | undefined;
    currency?: string | undefined;
    id?: string | undefined;
    metadata?: Record<string, string> | undefined;
    provider_metadata?: Record<string, unknown> | undefined;
    customer?: {
        email: string;
    } | {
        id: string | number;
    } | null | undefined;
    amount?: number | undefined;
    item_id?: string | null | undefined;
    requires_action?: boolean | undefined;
    payment_url?: string | null | undefined;
}, {
    status?: "canceled" | "pending" | "requires_action" | "processing" | "requires_capture" | "succeeded" | "failed" | undefined;
    currency?: string | undefined;
    id?: string | undefined;
    metadata?: Record<string, string> | undefined;
    provider_metadata?: Record<string, unknown> | undefined;
    customer?: {
        email: string;
    } | {
        id: string | number;
    } | null | undefined;
    amount?: number | undefined;
    item_id?: string | null | undefined;
    requires_action?: boolean | undefined;
    payment_url?: string | null | undefined;
}>;
interface RetrievePaymentSchema {
    /**
     * The unique identifier of the payment.
     */
    id: string;
}
declare const retrievePaymentSchema: z.ZodObject<Pick<{
    id: z.ZodString;
    amount: z.ZodNumber;
    currency: z.ZodString;
    customer: z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        email: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        email: string;
    }, {
        email: string;
    }>, z.ZodObject<{
        id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    }, "strip", z.ZodTypeAny, {
        id: string | number;
    }, {
        id: string | number;
    }>]>>;
    status: z.ZodEnum<["pending", "processing", "requires_action", "requires_capture", "succeeded", "canceled", "failed"]>;
    metadata: z.ZodRecord<z.ZodString, z.ZodString>;
    item_id: z.ZodNullable<z.ZodString>;
    requires_action: z.ZodBoolean;
    payment_url: z.ZodNullable<z.ZodString>;
}, "id">, "strip", z.ZodTypeAny, {
    id: string;
}, {
    id: string;
}>;
interface DeletePaymentSchema {
    /**
     * The unique identifier of the payment.
     */
    id: string;
}
declare const deletePaymentSchema: z.ZodObject<Pick<{
    id: z.ZodString;
    amount: z.ZodNumber;
    currency: z.ZodString;
    customer: z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        email: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        email: string;
    }, {
        email: string;
    }>, z.ZodObject<{
        id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    }, "strip", z.ZodTypeAny, {
        id: string | number;
    }, {
        id: string | number;
    }>]>>;
    status: z.ZodEnum<["pending", "processing", "requires_action", "requires_capture", "succeeded", "canceled", "failed"]>;
    metadata: z.ZodRecord<z.ZodString, z.ZodString>;
    item_id: z.ZodNullable<z.ZodString>;
    requires_action: z.ZodBoolean;
    payment_url: z.ZodNullable<z.ZodString>;
}, "id">, "strip", z.ZodTypeAny, {
    id: string;
}, {
    id: string;
}>;
interface CapturePaymentSchema {
    /**
     * The amount to capture.
     */
    amount: number;
}
declare const capturePaymentSchema: z.ZodObject<{
    amount: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    amount: number;
}, {
    amount: number;
}>;

export { type CapturePaymentSchema, type CreatePaymentSchema, type DeletePaymentSchema, type Payment, type PaymentStatus, type RetrievePaymentSchema, type UpdatePaymentSchema, capturePaymentSchema, createPaymentSchema, deletePaymentSchema, paymentSchema, paymentStatusSchema, retrievePaymentSchema, updatePaymentSchema };
