import type { ApiClient, MoyasarClientTypes } from "../../shared/types/index";
import type { CreateInvoiceRequest, UpdateInvoiceRequest, BulkCreateInvoiceRequest, ListInvoicesResponse, BulkCreateInvoicesResponse, InvoiceListOptions, DetailedInvoice } from "./types";
import { InvoiceStatus } from "./enums";
type InvoiceServiceParams<T extends MoyasarClientTypes> = {
    apiClient: ApiClient<T>;
};
export declare class InvoiceService<T extends MoyasarClientTypes> {
    private readonly apiClient;
    private readonly invoiceUtils;
    constructor(p: InvoiceServiceParams<T>);
    /**
     * Create a new invoice
     */
    create(params: CreateInvoiceRequest<T["metadata"]>): Promise<DetailedInvoice<T["metadata"]>>;
    /**
     * Create multiple invoices in bulk
     */
    createBulk(params: BulkCreateInvoiceRequest<T["metadata"]>): Promise<BulkCreateInvoicesResponse<T["metadata"]>>;
    /**
     * List invoices with optional filtering
     */
    list(options?: InvoiceListOptions<T["metadata"]>): Promise<ListInvoicesResponse<T["metadata"]>>;
    /**
     * Retrieve a specific invoice
     */
    retrieve(invoiceId: string): Promise<DetailedInvoice<T["metadata"]>>;
    /**
     * Update an invoice
     */
    update(invoiceId: string, params: UpdateInvoiceRequest<T["metadata"]>): Promise<DetailedInvoice<T["metadata"]>>;
    /**
     * Cancel an invoice
     */
    cancel(invoiceId: string): Promise<DetailedInvoice<T["metadata"]>>;
    /**
     * Search invoices by metadata
     */
    searchByMetadata(metadata: Partial<T["metadata"]>, options?: Omit<InvoiceListOptions, "metadata">): Promise<ListInvoicesResponse<T["metadata"]>>;
    /**
     * Get invoices by status
     */
    getByStatus(status: InvoiceStatus, options?: Omit<InvoiceListOptions, "status">): Promise<ListInvoicesResponse<T["metadata"]>>;
    /**
     * Get expired invoices
     */
    getExpired(options?: Omit<InvoiceListOptions, "status">): Promise<ListInvoicesResponse<T["metadata"]>>;
    /**
     * Get paid invoices
     */
    getPaid(options?: Omit<InvoiceListOptions, "status">): Promise<ListInvoicesResponse<T["metadata"]>>;
    private handleError;
    protected parseBody(p: InvoiceListOptions<T["metadata"]>): {
        id?: string | undefined;
        status?: InvoiceStatus | undefined;
        "created[gt]"?: Date | undefined;
        "created[lt]"?: Date | undefined;
        page?: number;
        limit?: 40;
        metadata?: Partial<T["metadata"]> | null | undefined;
    };
}
export {};
//# sourceMappingURL=service.d.ts.map