import { BinaryDownload, CancelInvoiceOptions, GenericResponse, Invoice, SearchResult, SendEmailBody } from '../types';
import { WrapperClient } from '../wrapper';
export default class Invoices {
    client: WrapperClient;
    constructor(client: WrapperClient);
    /**
     * Creates a new valid invoice (CFDI).
     * @param body Invoice data
     * @param params Query params
     * @returns Invoice object
     */
    create(body: Record<string, any>, params?: Record<string, any> | null): Promise<Invoice>;
    /**
     * Gets a paginated list of invoices created by your organization
     * @param params - Search parameters
     * @returns Search results object. The object contains a `data` property with the list of invoices.
     */
    list(params?: Record<string, any> | null): Promise<SearchResult<Invoice>>;
    /**
     * Gets a single invoice object
     * @param id Invoice Id
     * @returns Invoice object
     */
    retrieve(id: string): Promise<Invoice>;
    /**
     * Cancels an invoice. The invoice will not be valid anymore and will change its status to canceled.
     * @param id Invoice Id
     * @param params Cancel options
     * @returns Canceled invoice
     */
    cancel(id: string, params: CancelInvoiceOptions): Promise<Invoice>;
    /**
     * Sends the invoice to the customer's email
     * @param id Invoice Id
     * @param options Additional arguments
     * @param options.email Email address to send the invoice to
     * @returns Object with 'ok' property set to true if the email was sent successfully
     */
    sendByEmail(id: string, options?: SendEmailBody): Promise<GenericResponse>;
    /**
     * Downloads the specified invoice in PDF format
     * @param id Invoice Id
     * @returns PDF file in a stream (Node.js) or Blob (browser)
     */
    downloadPdf(id: string): Promise<BinaryDownload>;
    /**
     * Downloads the specified invoice in XML format
     * @param id Invoice Id
     * @returns XML file in a stream (Node.js) or Blob (browser)
     */
    downloadXml(id: string): Promise<BinaryDownload>;
    /**
     * Downloads the specified invoice in a ZIP package containing both PDF and XML files
     * @param id Invoice Id
     * @returns ZIP file in a stream (Node.js) or Blob (browser)
     */
    downloadZip(id: string): Promise<BinaryDownload>;
    /**
     * Downloads the cancellation receipt of a canceled invoice in XML format
     * @param id Invoice Id
     * @returns XML file in a stream (Node.js) or Blob (browser)
     */
    downloadCancellationReceiptXml(id: string): Promise<BinaryDownload>;
    /**
     * Downloads the cancellation receipt of a canceled invoice in PDF format
     * @param id Invoice Id
     * @returns PDF file in a stream (Node.js) or Blob (browser)
     */
    downloadCancellationReceiptPdf(id: string): Promise<BinaryDownload>;
    /**
     * Edits an invoice with "draft" status.
     * @param id Invoice Id
     * @param data Invoice data to edit
     * @returns Edited invoice
     */
    updateDraft(id: string, data: Record<string, any>): Promise<Invoice>;
    /**
     * Stamps an invoice with "draft" status.
     * @param id Invoice Id
     * @param params Query params
     * @returns Stamped invoice
     */
    stampDraft(id: string, params?: Record<string, any> | null): Promise<Invoice>;
    /**
     * Updates the latest status of the invoice from the SAT
     * @param id Invoice Id
     * @returns Updated invoice
     */
    updateStatus(id: string): Promise<Invoice>;
    /**
     * Creates a draft invoice from any other invoice
     * @param id Invoice Id
     * @returns Draft invoice
     */
    copyToDraft(id: string): Promise<Invoice>;
    /**
     * Previews an invoice PDF before stamping it
     * @param body Invoice data
     * @returns PDF file in a stream (Node.js) or Blob (browser)
     */
    previewPdf(body: Record<string, any>): Promise<BinaryDownload>;
}
