import type { ApiClient, Metadata, MoyasarClientTypes } from "../../shared/types/index";
import type { ListPaymentsResponse, PaymentListOptions, Payment, CreatePaymentRequest, UpdatePaymentRequest, RefundPaymentRequest, CapturePaymentRequest } from "./types";
import { PaymentStatus } from "./enums";
type PaymentServiceParams<T extends MoyasarClientTypes> = {
    apiClient: ApiClient<T>;
};
export declare class PaymentService<T extends MoyasarClientTypes> {
    private apiClient;
    private readonly paymentUtils;
    constructor(p: PaymentServiceParams<T>);
    /**
     * Create a new payment
     */
    create(params: CreatePaymentRequest<T["metadata"]>): Promise<Payment<T["metadata"]>>;
    /**
     * List payments with optional filtering
     */
    list(options?: PaymentListOptions): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Retrieve a specific payment
     */
    retrieve(paymentId: string): Promise<Payment<T["metadata"]>>;
    /**
     * Update a payment
     */
    update({ paymentId, update, }: {
        paymentId: string;
        update: UpdatePaymentRequest<T["metadata"]>;
    }): Promise<Payment<T["metadata"]>>;
    /**
     * Refund a payment (full or partial)
     */
    refund({ paymentId, refund, }: {
        paymentId: string;
        refund: RefundPaymentRequest;
    }): Promise<Payment<T["metadata"]>>;
    /**
     * Capture an authorized payment (full or partial)
     */
    capture({ paymentId, capture, }: {
        paymentId: string;
        capture?: CapturePaymentRequest;
    }): Promise<Payment<T["metadata"]>>;
    /**
     * Void an authorized payment
     */
    void(paymentId: string): Promise<Payment<T["metadata"]>>;
    /**
     * Search payments by metadata
     */
    searchByMetadata({ metadata, options, }: {
        metadata: Metadata;
        options: Omit<PaymentListOptions, "metadata">;
    }): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get payments by status
     */
    getByStatus(status: PaymentStatus, options?: Omit<PaymentListOptions, "status">): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get paid payments
     */
    getPaid(options?: Omit<PaymentListOptions, "status">): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get failed payments
     */
    getFailed(options?: Omit<PaymentListOptions, "status">): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get authorized payments
     */
    getAuthorized(options?: Omit<PaymentListOptions, "status">): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get refunded payments
     */
    getRefunded(options?: Omit<PaymentListOptions, "status">): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get payments by card last 4 digits
     */
    getByCardLast4({ last4, options, }: {
        last4: string;
        options: Omit<PaymentListOptions, "last_4">;
    }): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Get payments by RRN (Retrieval Reference Number)
     */
    getByRRN({ rrn, options, }: {
        rrn: string;
        options: Omit<PaymentListOptions, "rrn">;
    }): Promise<ListPaymentsResponse<T["metadata"]>>;
    /**
     * Check payment capabilities (what actions can be performed)
     */
    getPaymentCapabilities(paymentId: string): Promise<{
        canRefund: boolean;
        canCapture: boolean;
        canVoid: boolean;
        maxRefundAmount: number;
        maxCaptureAmount: number;
    }>;
    private handleError;
    protected parseBody(p: object): Record<string, string>;
}
export {};
//# sourceMappingURL=service.d.ts.map