import { DTOSubscriptionResponse, DTOSubscriptionUpdateInput, DTOSubscriptionUpdatePreview } from "@supernova-studio/client";
import { UserRole } from "../enums/SDKUserRole";
import { WorkspaceSubscriptionPlanInterval } from "../enums/SDKWorkspaceSubscriptionPlanInterval";
import { WorkspaceSubscriptionProductCode } from "../enums/SDKWorkspaceSubscriptionProduct";
import { WorkspaceSubscriptionStatus } from "../enums/SDKWorkspaceSubscriptionStatus";
import { ProductFeature } from "./SDKWorkspaceProductFeatures";
export type WorkspaceSubscriptionRemoteModel = DTOSubscriptionResponse;
export type WorkspaceSubscriptionTransportModel = WorkspaceSubscriptionRemoteModel;
export type WorkspaceSubscriptionUpdateModel = DTOSubscriptionUpdateInput;
export type WorkspaceSubscriptionUpdatePreviewModel = DTOSubscriptionUpdatePreview;
export declare class WorkspaceSubscription {
    /** Main status of the workspace subscription */
    status: WorkspaceSubscriptionStatus;
    /** Maximum number of Builders seats */
    builderSeatLimit: number;
    /** Current number of Builder seats the workspace uses */
    builderSeats: number;
    /** Maximum number of DSM (Full) seats */
    fullSeatLimit: number;
    /** Current number of DSM (Full) seats the workspace uses */
    fullSeats: number;
    /** Subscription tier */
    product: WorkspaceSubscriptionProductCode;
    /** Subscription cycle interval */
    planInterval: WorkspaceSubscriptionPlanInterval;
    /** Trial, mostly used for Enterprise plans */
    isTrial: boolean;
    /**
     * Stripe price id for a Full seat.
     */
    fullSeatPriceId: string;
    /**
     * Stripe price id for a Builder seat.
     * Can be optional if no Builder subscription was created on Stripe (e.g., on legacy plans).
     */
    builderSeatPriceId: string | null;
    /** Starting date of the current billing cycle */
    currentPeriodStart: Date | null;
    /** Ending date of the current billing cycle */
    currentPeriodEnd: Date | null;
    /**
     * Only available if the subscription is still active but scheduled to be canceled.
     * Also used to check for this particular status, as we are still getting `status: active` in that case.
     */
    cancelAt: Date | null;
    /** Stripe customer ID. Note: visible only for Owner and Admin role */
    stripeCustomerId: string | null;
    /** Stripe subscription ID. Note: visible only for Owner and Admin role */
    stripeSubscriptionId: string | null;
    /** Card information. Note: visible only for Owner and Admin roles */
    card: {
        last4: string | null;
        expiryMonth: string | null;
        expiryYear: string | null;
        brand: string | null;
    } | null;
    /** Price of the subscription, in the smallest currency unit (e.g., cents) */
    amount: number;
    /** Product description */
    stripeProductDescription: string | null;
    /** Date when subscription status was updated */
    subscriptionStatusUpdatedAt: Date | null;
    /** Product version when it is legacy */
    legacyVersion: string | null;
    /** Indicates whether the price is per creator (self-serve) or not */
    isPricePerCreator: boolean;
    /** List of features available to this product price */
    stripeProductFeatures: Array<string>;
    /** List of additional features available to this product price */
    stripeProductAdditionalFeatures: Array<string>;
    /** List of features defined in a machine-readable way */
    featuresSummary: ProductFeature;
    creditsPrices: {
        creditsToCentsConversionRate: number;
        purchaseTopUpCreditsToCentsConversionRate: number;
    };
    creditBalance: {
        free: {
            credits: {
                total: number;
                used: number;
                balance: number;
                resetAt: Date | null;
            };
            spendingLimit: {
                total: number;
                used: number;
                balance: number;
                resetAt: Date | null;
            };
        } | null;
        /** Paid top-up credits balance */
        paidTopUp: {
            total: number;
            used: number;
            balance: number;
        } | null;
        /** Paid recurring credits balance */
        paidRecurring: {
            total: number;
            used: number;
            balance: number;
            resetAt: Date | null;
        } | null;
    } | null;
    /**
     * Description of what the subscription will change to in the next billing cycle.
     */
    subscriptionUpcomingChange: {
        effectiveAt: Date;
        fullSeatLimit: number | null;
        builderSeatLimit: number | null;
        additionalCredits: number | null;
    } | null;
    /** List of roles allowed to be invited to the workspace under this product */
    allowedRoles: Array<UserRole>;
    constructor(model: WorkspaceSubscriptionRemoteModel);
    static fromTransport(model: WorkspaceSubscriptionTransportModel): WorkspaceSubscription;
}
