import type { Invoice, CreateInvoiceRequest, BulkCreateInvoiceRequest, DetailedInvoice } from "./types";
import { InvoiceStatus } from "./enums";
import type { ValidationResult, Amount, CurrencyType } from "../../shared/types/index";
import type { MetadataValidator } from "../../shared/types/index";
type InvoiceUtilsParams<T extends object> = {
    metadataValidator: MetadataValidator<T>;
};
export declare class InvoiceUtils<T extends object> {
    private readonly metadataDeserializer;
    constructor(p: InvoiceUtilsParams<T>);
    /**
     * Validate single invoice creation request using Zod
     */
    validateCreateInvoiceRequest(request: CreateInvoiceRequest<T>): ValidationResult<CreateInvoiceRequest<T>>;
    /**
     * Validate bulk invoice creation request using Zod
     */
    validateBulkCreateRequest(request: BulkCreateInvoiceRequest<T>): ValidationResult<BulkCreateInvoiceRequest<T>>;
    /**
     * Convert amount to display format
     */
    formatAmount(amount: Amount, currency: CurrencyType): `${number} ${CurrencyType}`;
    /**
     * Parse amount from display format to smallest unit
     */
    parseAmount(formattedAmount: string, currency: CurrencyType): number;
    /**
     * Check if invoice is in a final state
     */
    isInvoiceFinal(status: InvoiceStatus): boolean;
    /**
     * Check if invoice can be canceled
     */
    canCancelInvoice(invoice: Invoice): boolean;
    /**
     * Check if invoice is expired
     */
    isInvoiceExpired(invoice: Invoice): boolean;
    /**
     * Get time until expiry
     */
    getTimeUntilExpiry(invoice: Invoice): number | null;
    /**
     * Get payment summary for an invoice
     */
    getPaymentSummary(invoice: DetailedInvoice<T>): {
        total: number;
        paid: number;
        failed: number;
        pending: number;
        totalAmount: number;
        paidAmount: number;
        refundedAmount: number;
    };
    /**
     * Build metadata query parameters for filtering
     */
    buildMetadataQuery(metadata: T): Record<`metadata[${string}]`, string>;
    /**
     * Sanitize invoice description
     */
    sanitizeDescription(description: string): string;
    /**
     * Generate invoice reference number
     */
    generateReference(prefix?: string): string;
    /**
     * Parse and validate a CreateInvoiceRequest, returning sanitized data
     */
    parseCreateInvoiceRequest(request: unknown): ValidationResult<CreateInvoiceRequest<T>>;
    /**
     * Parse and validate a BulkCreateInvoiceRequest, returning sanitized data
     */
    parseBulkCreateRequest(request: unknown): ValidationResult<BulkCreateInvoiceRequest<T>>;
    parseInvoice(invoice: unknown): Invoice<T>;
}
export {};
//# sourceMappingURL=utils.d.ts.map