import * as z from "zod/v4-mini";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import { CustomerCancellationReason } from "./customercancellationreason.js";
import { CustomerSubscriptionMeter } from "./customersubscriptionmeter.js";
import { CustomerSubscriptionProduct } from "./customersubscriptionproduct.js";
import { LegacyRecurringProductPrice } from "./legacyrecurringproductprice.js";
import { PendingSubscriptionUpdate } from "./pendingsubscriptionupdate.js";
import { ProductPrice } from "./productprice.js";
import { RecurringInterval } from "./recurringinterval.js";
import { SubscriptionStatus } from "./subscriptionstatus.js";
export type CustomerSubscriptionPrices = LegacyRecurringProductPrice | ProductPrice;
export type CustomerSubscription = {
    /**
     * Creation timestamp of the object.
     */
    createdAt: Date;
    /**
     * Last modification timestamp of the object.
     */
    modifiedAt: Date | null;
    /**
     * The ID of the object.
     */
    id: string;
    /**
     * The amount of the subscription.
     */
    amount: number;
    /**
     * The currency of the subscription.
     */
    currency: string;
    recurringInterval: RecurringInterval;
    /**
     * Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on.
     */
    recurringIntervalCount: number;
    status: SubscriptionStatus;
    /**
     * The start timestamp of the current billing period.
     */
    currentPeriodStart: Date;
    /**
     * The end timestamp of the current billing period.
     */
    currentPeriodEnd: Date;
    /**
     * The start timestamp of the current meter period, if the product has a meter cycle set. Metered credits are granted and overage is settled on this cadence.
     */
    currentMeterPeriodStart: Date | null;
    /**
     * The end timestamp of the current meter period, if the product has a meter cycle set. This is when credits next renew.
     */
    currentMeterPeriodEnd: Date | null;
    /**
     * The start timestamp of the trial period, if any.
     */
    trialStart: Date | null;
    /**
     * The end timestamp of the trial period, if any.
     */
    trialEnd: Date | null;
    /**
     * Whether the subscription will be canceled at the end of the current period.
     */
    cancelAtPeriodEnd: boolean;
    /**
     * The timestamp when the subscription was canceled. The subscription might still be active if `cancel_at_period_end` is `true`.
     */
    canceledAt: Date | null;
    /**
     * The timestamp when the subscription started.
     */
    startedAt: Date | null;
    /**
     * The timestamp when the subscription will end.
     */
    endsAt: Date | null;
    /**
     * The timestamp when the subscription ended.
     */
    endedAt: Date | null;
    /**
     * The timestamp when the subscription entered `past_due` status.
     */
    pastDueAt?: Date | null | undefined;
    /**
     * Whether the subscription will be paused at the end of the current period.
     */
    pauseAtPeriodEnd: boolean;
    /**
     * The timestamp when the subscription was paused.
     */
    pausedAt: Date | null;
    /**
     * The timestamp when a paused subscription is scheduled to automatically resume, if set.
     */
    resumesAt: Date | null;
    /**
     * The ID of the subscribed customer.
     */
    customerId: string;
    /**
     * The ID of the subscribed product.
     */
    productId: string;
    /**
     * The ID of the applied discount, if any.
     */
    discountId: string | null;
    checkoutId: string | null;
    /**
     * The number of seats for seat-based subscriptions. None for non-seat subscriptions.
     */
    seats?: number | null | undefined;
    customerCancellationReason: CustomerCancellationReason | null;
    customerCancellationComment: string | null;
    product: CustomerSubscriptionProduct;
    /**
     * List of enabled prices for the subscription.
     */
    prices: Array<LegacyRecurringProductPrice | ProductPrice>;
    /**
     * List of meters associated with the subscription.
     */
    meters: Array<CustomerSubscriptionMeter>;
    /**
     * Pending subscription update that will be applied at the beginning of the next period. If `null`, there is no pending update.
     */
    pendingUpdate: PendingSubscriptionUpdate | null;
};
/** @internal */
export declare const CustomerSubscriptionPrices$inboundSchema: z.ZodMiniType<CustomerSubscriptionPrices, unknown>;
export declare function customerSubscriptionPricesFromJSON(jsonString: string): SafeParseResult<CustomerSubscriptionPrices, SDKValidationError>;
/** @internal */
export declare const CustomerSubscription$inboundSchema: z.ZodMiniType<CustomerSubscription, unknown>;
export declare function customerSubscriptionFromJSON(jsonString: string): SafeParseResult<CustomerSubscription, SDKValidationError>;
//# sourceMappingURL=customersubscription.d.ts.map