import { CreateCustomerArgs, CustomersCustomerNameFeaturesFeatureNameGetRequest, CustomersCustomerNameUsageGetRequest, CreateSubscriptionArgs, Customer, CustomerFeature, CustomerPaymentGatewayCredentialInputArgs, CustomerUsage, DeleteSubscriptionArgs, PaymentGatewayCredential, Subscription, UpdateCustomerArgs, UpdateSubscriptionArgs, ActiveSubscription, CustomersCustomerNameScheduledSubscriptionsGetRequest, CustomerBillingSettingsInputArgs, BillingSettings, SubscriptionAddOnItem, CustomerStatus, Invoice, AccruedRevenue } from '../codegen';
import { Configuration as APIConfiguration } from '../codegen/runtime';
import { BaseResource } from './base';
declare type DateArgs = {
    startTime?: Date;
    endTime?: Date;
};
declare type ArgsWithDate<T extends DateArgs> = Omit<T, 'startTime' | 'endTime'> & {
    startTime?: Date | string;
    endTime?: Date | string;
};
declare type RetrieveUsageArgs = ArgsWithDate<CustomersCustomerNameUsageGetRequest>;
declare class Customers extends BaseResource {
    private api;
    constructor(apiConfig: APIConfiguration);
    /**
     * Create a new customer.
     */
    create(createCustomerArgs: CreateCustomerArgs, overrides?: RequestInit): Promise<Customer>;
    /**
     * Fetch a customer by their unique name.
     */
    retrieve(customerName: string, overrides?: RequestInit): Promise<Customer>;
    /**
     * Update a single customer.
     */
    update(customerName: string, updateCustomerArgs: UpdateCustomerArgs, overrides?: RequestInit): Promise<Customer>;
    /**
     * Retrieve all customers for a given vendor.
     */
    list(overrides?: RequestInit): Promise<Customer[]>;
    /**
     * Delete a customer by their unique name.
     */
    delete(customerName: string, overrides?: RequestInit): Promise<void>;
    /**
     * Add PaymentGatewayCredential for a customer.
     */
    createPaymentGatewayCredential(customerName: string, customerPaymentGatewayCredentialInputArgs: CustomerPaymentGatewayCredentialInputArgs, overrides?: RequestInit): Promise<PaymentGatewayCredential>;
    /**
     * Retrieve PaymentGatewayCredential for a customer.
     */
    retrievePaymentGatewayCredential(customerName: string, overrides?: RequestInit): Promise<PaymentGatewayCredential>;
    /**
     * Create a new subscription for a customer / price plan combination (by unique name).
     */
    createSubscription(customerName: string, createSubscriptionArgs: CreateSubscriptionArgs, overrides?: RequestInit): Promise<Subscription>;
    /**
     * Get active subscription for the customer.
     */
    getActiveSubscription(customerName: string, overrides?: RequestInit): Promise<ActiveSubscription>;
    /**
     * Get all subscriptions for the customer.
     */
    listSubscriptions(customerName: string, overrides?: RequestInit): Promise<Subscription[]>;
    /**
     * Update a subscription for a specific customer (by customer name).
     */
    updateSubscription(customerName: string, updateSubscriptionArgs: UpdateSubscriptionArgs, overrides?: RequestInit): Promise<Subscription>;
    /**
     * Delete a subscription for a specific customer (by customer name).
     */
    deleteSubscription(customerName: string, deleteSubscriptionArgs: DeleteSubscriptionArgs, overrides?: RequestInit): Promise<void>;
    /**
     * Modify subscription add ons.
     */
    modifySubscriptionAddOns(customerName: string, subscriptionAddOnItems: Array<SubscriptionAddOnItem>, overrides?: RequestInit): Promise<void>;
    /**
     * Retreive a customer's access to feature/limitation.
     */
    retrieveUsage({ startTime, endTime, ...rest }: RetrieveUsageArgs, overrides?: RequestInit): Promise<CustomerUsage>;
    /**
     * Retreive a customer's access to feature/limitation.
     */
    retrieveFeature(retrieveFeatureArgs: CustomersCustomerNameFeaturesFeatureNameGetRequest, overrides?: RequestInit): Promise<CustomerFeature>;
    /**
     * Get a list of scheduled subscriptions for the given customer.
     */
    getScheduledSubscription(retrieveFeatureArgs: CustomersCustomerNameScheduledSubscriptionsGetRequest, overrides?: RequestInit): Promise<Subscription[]>;
    /**
     * Create the customer entity tied to your accounting software.
     */
    createAccountingCustomer(customerName: string, overrides?: RequestInit): Promise<void>;
    /**
     * Create customer's billing settings.
     */
    createBillingSettings(customerName: string, customerBillingSettingsInputArgs: CustomerBillingSettingsInputArgs, overrides?: RequestInit): Promise<BillingSettings>;
    /**
     * Update customer's billing settings.
     */
    updateBillingSettings(customerName: string, customerBillingSettingsInputArgs: CustomerBillingSettingsInputArgs, overrides?: RequestInit): Promise<BillingSettings>;
    /**
     * Delete customer's billing settings.
     */
    deleteBillingSettings(customerName: string, overrides?: RequestInit): Promise<void>;
    /**
     * Get Customer's status.
     */
    getCustomerStatus(customerName: string, overrides?: RequestInit): Promise<CustomerStatus>;
    getCustomerInvoices(customerName: string, overrides?: RequestInit): Promise<Invoice[]>;
    getTotalAccrueRevenue(customerName: string, overrides?: RequestInit): Promise<AccruedRevenue>;
}
export { Customers };
