import { default as Stripe } from 'stripe';
import { SubscriptionStatus } from '../../repository/billing/IBillingRepository';
export interface IBillingProviderService {
    checkoutSessionIsPaid(paymentId: string): Promise<boolean>;
    handleSubscriptionCancel(subscriptionId: string): Promise<void>;
    handleSubscriptionCreation(subscriptionId: string): Promise<void>;
    handleSubscriptionUpdate(args: {
        subscriptionId: string;
        subscriptionItemId: string;
        membershipCount: number;
        prorationBehavior?: "none" | "create_prorations" | "always_invoice";
    }): Promise<void>;
    handleEndTrial(subscriptionId: string): Promise<void>;
    createCustomer(args: {
        email: string;
        metadata?: Record<string, string>;
    }): Promise<{
        stripeCustomerId: string;
    }>;
    createPaymentIntent(args: {
        customerId: string;
        amount: number;
        metadata?: Record<string, string | number>;
    }): Promise<{
        id: string;
        client_secret: string | null;
    }>;
    createSubscriptionCheckout(args: {
        customerId: string;
        successUrl: string;
        cancelUrl: string;
        priceId: string;
        quantity: number;
        metadata?: Record<string, string | number>;
        mode?: "subscription" | "setup" | "payment";
        allowPromotionCodes?: boolean;
        customerUpdate?: {
            address?: "auto" | "never";
        };
        automaticTax?: {
            enabled: boolean;
        };
        discounts?: Array<{
            coupon: string;
        }>;
        subscriptionData?: {
            metadata?: Record<string, string | number>;
            trial_period_days?: number;
        };
    }): Promise<{
        checkoutUrl: string | null;
        sessionId: string;
    }>;
    createPrice(args: {
        amount: number;
        currency: string;
        interval: "month" | "year";
        nickname?: string;
        productId: string;
        metadata?: Record<string, string | number>;
    }): Promise<{
        priceId: string;
    }>;
    getPrice(priceId: string): Promise<Stripe.Price | null>;
    getSubscriptionStatus(subscriptionId: string): Promise<SubscriptionStatus | null>;
    getCheckoutSession(checkoutSessionId: string): Promise<Stripe.Checkout.Session | null>;
    getCustomer(customerId: string): Promise<Stripe.Customer | Stripe.DeletedCustomer | null>;
    getSubscriptions(customerId: string): Promise<Stripe.Subscription[] | null>;
    updateCustomer(args: {
        customerId: string;
        email: string;
        userId?: number;
    }): Promise<void>;
    createInvoiceItem(args: {
        customerId: string;
        amount: number;
        currency: string;
        description: string;
        subscriptionId?: string;
        invoiceId?: string;
        metadata?: Record<string, string>;
    }): Promise<{
        invoiceItemId: string;
    }>;
    deleteInvoiceItem(invoiceItemId: string): Promise<void>;
    createInvoice(args: {
        customerId: string;
        autoAdvance: boolean;
        collectionMethod?: "charge_automatically" | "send_invoice";
        daysUntilDue?: number;
        pendingInvoiceItemsBehavior?: "exclude" | "include";
        subscriptionId?: string;
        metadata?: Record<string, string>;
    }): Promise<{
        invoiceId: string;
    }>;
    finalizeInvoice(invoiceId: string): Promise<{
        invoiceUrl: string | null;
    }>;
    voidInvoice(invoiceId: string): Promise<void>;
    getPaymentIntentFailureReason(paymentIntentId: string): Promise<string | null>;
    hasDefaultPaymentMethod(args: {
        customerId: string;
        subscriptionId?: string;
    }): Promise<boolean>;
    createSubscriptionUsageRecord(args: {
        subscriptionId: string;
        action: "increment" | "set";
        quantity: number;
    }): Promise<void>;
    getSubscription(subscriptionId: string): Promise<{
        items: Array<{
            id: string;
            quantity: number;
            price: {
                unit_amount: number | null;
                recurring: {
                    interval: string;
                } | null;
            };
        }>;
        customer: string;
        status: string;
        current_period_start: number;
        current_period_end: number;
        trial_end: number | null;
    } | null>;
    listInvoices(args: {
        customerId: string;
        subscriptionId?: string;
        limit: number;
        startingAfter?: string;
        createdGte?: number;
        createdLte?: number;
    }): Promise<{
        invoices: Array<{
            id: string;
            number: string | null;
            created: number;
            amountDue: number;
            amountPaid: number;
            currency: string;
            status: string | null;
            hostedInvoiceUrl: string | null;
            invoicePdf: string | null;
            lineItems: Array<{
                id: string;
                description: string | null;
                amount: number;
                quantity: number | null;
            }>;
            description: string | null;
            paymentMethod: {
                type: string;
                card?: {
                    last4: string;
                    brand: string;
                };
            } | null;
        }>;
        hasMore: boolean;
    }>;
}
//# sourceMappingURL=IBillingProviderService.d.ts.map