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

declare const subscriptionIntervalUnitSchema: z.ZodEnum<["day", "week", "month", "year"]>;
declare const subscriptionBillingIntervalSchema: z.ZodUnion<[z.ZodEnum<["day", "week", "month", "year"]>, z.ZodObject<{
    type: z.ZodLiteral<"custom">;
    durationMs: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    type: "custom";
    durationMs: number;
}, {
    type: "custom";
    durationMs: number;
}>]>;
type SubscriptionBillingInterval = z.infer<typeof subscriptionBillingIntervalSchema>;
declare const subscriptionStatusSchema: z.ZodEnum<["active", "past_due", "canceled", "expired", "trialing", "pending"]>;
type SubscriptionStatus = z.infer<typeof subscriptionStatusSchema>;
interface Subscription {
    /**
     * The unique identifier of the subscription.
     */
    id: string;
    /**
     * The payee linked to the subscription.
     */
    customer: Payee | null;
    /**
     * The amount of the subscription.
     */
    amount: number;
    /**
     * The currency of the subscription.
     */
    currency: string;
    /**
     * The status of the subscription.
     */
    status: SubscriptionStatus;
    /**
     * The start of the current billing period.
     */
    current_period_start: Date;
    /**
     * The end of the current billing period.
     */
    current_period_end: Date;
    /**
     * The item ID of the subscription.
     */
    item_id: string;
    /**
     * The billing interval of the subscription.
     */
    billing_interval: SubscriptionBillingInterval;
    /**
     * The metadata of the subscription.
     */
    metadata: PaykitMetadata | null;
    /**
     * The custom fields of the subscription.
     */
    custom_fields: Record<string, unknown> | null;
    /**
     * Whether the subscription requires action.
     */
    requires_action: boolean;
    /**
     * The URL to the payment page of the subscription if requires action.
     */
    payment_url: string | null;
}
declare const subscriptionSchema: z.ZodObject<{
    id: 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;
    }>]>>;
    amount: z.ZodNumber;
    currency: z.ZodString;
    status: z.ZodEnum<["active", "past_due", "canceled", "expired", "trialing", "pending"]>;
    current_period_start: z.ZodDate;
    current_period_end: z.ZodDate;
    item_id: z.ZodString;
    billing_interval: z.ZodUnion<[z.ZodEnum<["day", "week", "month", "year"]>, z.ZodObject<{
        type: z.ZodLiteral<"custom">;
        durationMs: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        type: "custom";
        durationMs: number;
    }, {
        type: "custom";
        durationMs: number;
    }>]>;
    metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
    custom_fields: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    requires_action: z.ZodBoolean;
    payment_url: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    status: "active" | "past_due" | "canceled" | "expired" | "trialing" | "pending";
    currency: string;
    id: string;
    metadata: Record<string, string> | null;
    custom_fields: Record<string, unknown> | null;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    current_period_start: Date;
    current_period_end: Date;
    item_id: string;
    billing_interval: "day" | "week" | "month" | "year" | {
        type: "custom";
        durationMs: number;
    };
    requires_action: boolean;
    payment_url: string | null;
}, {
    status: "active" | "past_due" | "canceled" | "expired" | "trialing" | "pending";
    currency: string;
    id: string;
    metadata: Record<string, string> | null;
    custom_fields: Record<string, unknown> | null;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    current_period_start: Date;
    current_period_end: Date;
    item_id: string;
    billing_interval: "day" | "week" | "month" | "year" | {
        type: "custom";
        durationMs: number;
    };
    requires_action: boolean;
    payment_url: string | null;
}>;
interface UpdateSubscriptionSchema<TProviderMetadata = Record<string, unknown>> {
    /**
     * The metadata of the subscription.
     */
    metadata: PaykitMetadata;
    /**
     * The provider metadata of the subscription.
     */
    provider_metadata?: TProviderMetadata;
}
declare const updateSubscriptionSchema: z.ZodObject<{
    metadata: z.ZodRecord<z.ZodString, z.ZodString>;
    provider_metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, "strip", z.ZodTypeAny, {
    metadata: Record<string, string>;
    provider_metadata?: Record<string, unknown> | undefined;
}, {
    metadata: Record<string, string>;
    provider_metadata?: Record<string, unknown> | undefined;
}>;
interface RetrieveSubscriptionSchema {
    /**
     * The unique identifier of the subscription.
     */
    id: string;
}
declare const retrieveSubscriptionSchema: z.ZodObject<{
    id: z.ZodString;
}, "strip", z.ZodTypeAny, {
    id: string;
}, {
    id: string;
}>;
interface DeleteSubscriptionSchema {
    /**
     * The unique identifier of the subscription.
     */
    id: string;
}
declare const deleteSubscriptionSchema: z.ZodObject<{
    id: z.ZodString;
}, "strip", z.ZodTypeAny, {
    id: string;
}, {
    id: string;
}>;
interface CreateSubscriptionSchema<TProviderMetadata = Record<string, unknown>> extends Omit<Subscription, 'id' | 'status' | 'custom_fields' | 'current_period_start' | 'current_period_end' | 'requires_action' | 'payment_url'> {
    /**
     * The provider metadata of the subscription.
     */
    provider_metadata?: TProviderMetadata;
    /**
     * The quantity of the subscription.
     */
    quantity: number;
}
declare const createSubscriptionSchema: z.ZodObject<Omit<{
    id: 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;
    }>]>>;
    amount: z.ZodNumber;
    currency: z.ZodString;
    status: z.ZodEnum<["active", "past_due", "canceled", "expired", "trialing", "pending"]>;
    current_period_start: z.ZodDate;
    current_period_end: z.ZodDate;
    item_id: z.ZodString;
    billing_interval: z.ZodUnion<[z.ZodEnum<["day", "week", "month", "year"]>, z.ZodObject<{
        type: z.ZodLiteral<"custom">;
        durationMs: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        type: "custom";
        durationMs: number;
    }, {
        type: "custom";
        durationMs: number;
    }>]>;
    metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
    custom_fields: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    requires_action: z.ZodBoolean;
    payment_url: z.ZodNullable<z.ZodString>;
}, "status" | "id" | "custom_fields" | "current_period_start" | "current_period_end" | "requires_action" | "payment_url"> & {
    provider_metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    quantity: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    currency: string;
    metadata: Record<string, string> | null;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    item_id: string;
    billing_interval: "day" | "week" | "month" | "year" | {
        type: "custom";
        durationMs: number;
    };
    quantity: number;
    provider_metadata?: Record<string, unknown> | undefined;
}, {
    currency: string;
    metadata: Record<string, string> | null;
    customer: {
        email: string;
    } | {
        id: string | number;
    } | null;
    amount: number;
    item_id: string;
    billing_interval: "day" | "week" | "month" | "year" | {
        type: "custom";
        durationMs: number;
    };
    quantity: number;
    provider_metadata?: Record<string, unknown> | undefined;
}>;

export { type CreateSubscriptionSchema, type DeleteSubscriptionSchema, type RetrieveSubscriptionSchema, type Subscription, type SubscriptionBillingInterval, type SubscriptionStatus, type UpdateSubscriptionSchema, createSubscriptionSchema, deleteSubscriptionSchema, retrieveSubscriptionSchema, subscriptionBillingIntervalSchema, subscriptionIntervalUnitSchema, subscriptionSchema, subscriptionStatusSchema, updateSubscriptionSchema };
