/**
 * AdvancedBilling
 *
 * This file was automatically generated for Maxio by APIMATIC v3.0 ( https://www.apimatic.io ).
 */
import { ApiResponse, RequestOptions } from '../core';
import { CreateSignupProformaPreviewInclude } from '../models/createSignupProformaPreviewInclude';
import { CreateSubscriptionRequest } from '../models/createSubscriptionRequest';
import { Direction } from '../models/direction';
import { ListProformaInvoicesResponse } from '../models/listProformaInvoicesResponse';
import { ProformaInvoice } from '../models/proformaInvoice';
import { ProformaInvoiceStatus } from '../models/proformaInvoiceStatus';
import { SignupProformaPreviewResponse } from '../models/signupProformaPreviewResponse';
import { VoidInvoiceRequest } from '../models/voidInvoiceRequest';
import { BaseController } from './baseController';
export declare class ProformaInvoicesController extends BaseController {
    /**
     * This endpoint will trigger the creation of a consolidated proforma invoice asynchronously. It will
     * return a 201 with no message, or a 422 with any errors. To find and view the new consolidated
     * proforma invoice, you may poll the subscription group listing for proforma invoices; only one
     * consolidated proforma invoice may be created per group at a time.
     *
     * If the information becomes outdated, simply void the old consolidated proforma invoice and generate
     * a new one.
     *
     * ## Restrictions
     *
     * Proforma invoices are only available on Relationship Invoicing sites. To create a proforma invoice,
     * the subscription must not be prepaid, and must be in a live state.
     *
     * @param uid The uid of the subscription group
     * @return Response from the API call
     */
    createConsolidatedProformaInvoice(uid: string, requestOptions?: RequestOptions): Promise<ApiResponse<void>>;
    /**
     * Only proforma invoices with a `consolidation_level` of parent are returned.
     *
     * By default, proforma invoices returned on the index will only include totals, not detailed
     * breakdowns for `line_items`, `discounts`, `taxes`, `credits`, `payments`, `custom_fields`. To
     * include breakdowns, pass the specific field as a key in the query with a value set to true.
     *
     *
     * @param uid           The uid of the subscription group
     * @param lineItems     Include line items data
     * @param discounts     Include discounts data
     * @param taxes         Include taxes data
     * @param credits       Include credits data
     * @param payments      Include payments data
     * @param customFields  Include custom fields data
     * @return Response from the API call
     */
    listSubscriptionGroupProformaInvoices({ uid, lineItems, discounts, taxes, credits, payments, customFields, }: {
        uid: string;
        lineItems?: boolean;
        discounts?: boolean;
        taxes?: boolean;
        credits?: boolean;
        payments?: boolean;
        customFields?: boolean;
    }, requestOptions?: RequestOptions): Promise<ApiResponse<ListProformaInvoicesResponse>>;
    /**
     * Use this endpoint to read the details of an existing proforma invoice.
     *
     * ## Restrictions
     *
     * Proforma invoices are only available on Relationship Invoicing sites.
     *
     * @param proformaInvoiceUid   The uid of the proforma invoice
     * @return Response from the API call
     */
    readProformaInvoice(proformaInvoiceUid: string, requestOptions?: RequestOptions): Promise<ApiResponse<ProformaInvoice>>;
    /**
     * This endpoint will create a proforma invoice and return it as a response. If the information becomes
     * outdated, simply void the old proforma invoice and generate a new one.
     *
     * If you would like to preview the next billing amounts without generating a full proforma invoice,
     * please use the renewal preview endpoint.
     *
     * ## Restrictions
     *
     * Proforma invoices are only available on Relationship Invoicing sites. To create a proforma invoice,
     * the subscription must not be in a group, must not be prepaid, and must be in a live state.
     *
     * @param subscriptionId  The Chargify id of the subscription
     * @return Response from the API call
     */
    createProformaInvoice(subscriptionId: number, requestOptions?: RequestOptions): Promise<ApiResponse<ProformaInvoice>>;
    /**
     * By default, proforma invoices returned on the index will only include totals, not detailed
     * breakdowns for `line_items`, `discounts`, `taxes`, `credits`, `payments`, or `custom_fields`. To
     * include breakdowns, pass the specific field as a key in the query with a value set to `true`.
     *
     * @param subscriptionId  The Chargify id of the subscription
     * @param startDate       The beginning date range for the invoice's Due Date, in the YYYY-
     *                                                 MM-DD format.
     * @param endDate         The ending date range for the invoice's Due Date, in the YYYY-MM-
     *                                                 DD format.
     * @param status          The current status of the invoice.  Allowed Values: draft, open,
     *                                                 paid, pending, voided
     * @param page            Result records are organized in pages. By default, the first page
     *                                                 of results is displayed. The page parameter specifies a page
     *                                                 number of results to fetch. You can start navigating through the
     *                                                 pages to consume the results. You do this by passing in a page
     *                                                 parameter. Retrieve the next page by adding ?page=2 to the query
     *                                                 string. If there are no results to return, then an empty result
     *                                                 set will be returned. Use in query `page=1`.
     * @param perPage         This parameter indicates how many records to fetch in each
     *                                                 request. Default value is 20. The maximum allowed values is 200;
     *                                                 any per_page value over 200 will be changed to 200. Use in query
     *                                                 `per_page=200`.
     * @param direction       The sort direction of the returned invoices.
     * @param lineItems       Include line items data
     * @param discounts       Include discounts data
     * @param taxes           Include taxes data
     * @param credits         Include credits data
     * @param payments        Include payments data
     * @param customFields    Include custom fields data
     * @return Response from the API call
     */
    listProformaInvoices({ subscriptionId, startDate, endDate, status, page, perPage, direction, lineItems, discounts, taxes, credits, payments, customFields, }: {
        subscriptionId: number;
        startDate?: string;
        endDate?: string;
        status?: ProformaInvoiceStatus;
        page?: number;
        perPage?: number;
        direction?: Direction;
        lineItems?: boolean;
        discounts?: boolean;
        taxes?: boolean;
        credits?: boolean;
        payments?: boolean;
        customFields?: boolean;
    }, requestOptions?: RequestOptions): Promise<ApiResponse<ListProformaInvoicesResponse>>;
    /**
     * This endpoint will void a proforma invoice that has the status "draft".
     *
     * ## Restrictions
     *
     * Proforma invoices are only available on Relationship Invoicing sites.
     *
     * Only proforma invoices that have the appropriate status may be reopened. If the invoice identified
     * by {uid} does not have the appropriate status, the response will have HTTP status code 422 and an
     * error message.
     *
     * A reason for the void operation is required to be included in the request body. If one is not
     * provided, the response will have HTTP status code 422 and an error message.
     *
     * @param proformaInvoiceUid   The uid of the proforma invoice
     * @param body
     * @return Response from the API call
     */
    voidProformaInvoice(proformaInvoiceUid: string, body?: VoidInvoiceRequest, requestOptions?: RequestOptions): Promise<ApiResponse<ProformaInvoice>>;
    /**
     * Return a preview of the data that will be included on a given subscription's proforma invoice if one
     * were to be generated. It will have similar line items and totals as a renewal preview, but the
     * response will be presented in the format of a proforma invoice. Consequently it will include
     * additional information such as the name and addresses that will appear on the proforma invoice.
     *
     * The preview endpoint is subject to all the same conditions as the proforma invoice endpoint. For
     * example, previews are only available on the Relationship Invoicing architecture, and previews cannot
     * be made for end-of-life subscriptions.
     *
     * If all the data returned in the preview is as expected, you may then create a static proforma
     * invoice and send it to your customer. The data within a preview will not be saved and will not be
     * accessible after the call is made.
     *
     * Alternatively, if you have some proforma invoices already, you may make a preview call to determine
     * whether any billing information for the subscription's upcoming renewal has changed.
     *
     * @param subscriptionId  The Chargify id of the subscription
     * @return Response from the API call
     */
    previewProformaInvoice(subscriptionId: number, requestOptions?: RequestOptions): Promise<ApiResponse<ProformaInvoice>>;
    /**
     * This endpoint is only available for Relationship Invoicing sites. It cannot be used to create
     * consolidated proforma invoices or preview prepaid subscriptions.
     *
     * Create a proforma invoice to preview costs before a subscription's signup. Like other proforma
     * invoices, it can be emailed to the customer, voided, and publicly viewed on the chargifypay domain.
     *
     * Pass a payload that resembles a subscription create or signup preview request. For example, you can
     * specify components, coupons/a referral, offers, custom pricing, and an existing customer or payment
     * profile to populate a shipping or billing address.
     *
     * A product and customer first name, last name, and email are the minimum requirements. We recommend
     * associating the proforma invoice with a customer_id to easily find their proforma invoices, since
     * the subscription_id will always be blank.
     *
     * @param body
     * @return Response from the API call
     */
    createSignupProformaInvoice(body?: CreateSubscriptionRequest, requestOptions?: RequestOptions): Promise<ApiResponse<ProformaInvoice>>;
    /**
     * This endpoint is only available for Relationship Invoicing sites. It cannot be used to create
     * consolidated proforma invoice previews or preview prepaid subscriptions.
     *
     * Create a signup preview in the format of a proforma invoice to preview costs before a subscription's
     * signup. You have the option of optionally previewing the first renewal's costs as well. The proforma
     * invoice preview will not be persisted.
     *
     * Pass a payload that resembles a subscription create or signup preview request. For example, you can
     * specify components, coupons/a referral, offers, custom pricing, and an existing customer or payment
     * profile to populate a shipping or billing address.
     *
     * A product and customer first name, last name, and email are the minimum requirements.
     *
     * @param include      Choose to include a proforma invoice preview for the
     *                                                           first renewal. Use in query
     *                                                           `include=next_proforma_invoice`.
     * @param body
     * @return Response from the API call
     */
    previewSignupProformaInvoice(include?: CreateSignupProformaPreviewInclude, body?: CreateSubscriptionRequest, requestOptions?: RequestOptions): Promise<ApiResponse<SignupProformaPreviewResponse>>;
}
