import { PaymentMethod, Provider } from "@prisma/client";
export interface ProviderCreatePaymentInput {
    intentId: string;
    amount: string;
    currency: string;
    country: string;
    description?: string | null;
    externalReference?: string | null;
    customer?: {
        email?: string | null;
        name?: string | null;
        docType?: string | null;
        docNumber?: string | null;
        phone?: string | null;
        country?: string | null;
    };
    returnUrl?: string;
    cancelUrl?: string;
    notificationUrl?: string;
    platformId?: string;
    method?: PaymentMethod;
    preferLink?: boolean;
}
export type ProviderPaymentStatus = "pending" | "processing" | "approved" | "rejected" | "expired" | "error";
export interface ProviderCreatePaymentResult {
    providerPaymentId: string;
    status: ProviderPaymentStatus;
    method: PaymentMethod;
    redirectUrl?: string | null;
    qrData?: unknown | null;
    responseCode?: string | null;
    responseMessage?: string | null;
    rawRequest: unknown;
    rawResponse: unknown;
}
export interface ProviderGetPaymentResult {
    providerPaymentId: string;
    status: ProviderPaymentStatus;
    responseCode?: string | null;
    responseMessage?: string | null;
    rawResponse: unknown;
}
export interface ProviderRefundInput {
    providerPaymentId: string;
    amount: string;
    reason?: string | null;
}
export interface ProviderRefundResult {
    providerRefundId: string;
    status: "pending" | "approved" | "rejected" | "error";
    responseCode?: string | null;
    responseMessage?: string | null;
    rawRequest: unknown;
    rawResponse: unknown;
}
export interface ProviderAdapter {
    readonly provider: Provider;
    createPayment(input: ProviderCreatePaymentInput): Promise<ProviderCreatePaymentResult>;
    getPayment(providerPaymentId: string): Promise<ProviderGetPaymentResult>;
    refund(input: ProviderRefundInput): Promise<ProviderRefundResult>;
    parseWebhook(rawBody: string, headers: Record<string, string>): {
        providerPaymentId: string;
        status: ProviderPaymentStatus;
        raw: unknown;
    } | null;
}
