import { ConfigService } from '@nestjs/config';
import { PaymentProvider, Prisma } from '@prisma/client';
import { IntegrationConfigService } from '../integrations/integration-config.service';
type GatewayMode = 'sandbox' | 'live';
type InitializeGatewayPaymentInput = {
    provider: PaymentProvider;
    reference: string;
    amountKobo: number;
    currency: string;
    customerEmail: string;
    customerName: string;
    customerPhone: string;
    estateId: string;
    estateName: string;
    planCode: string;
    planName: string;
    metadata?: Record<string, unknown>;
};
type InitializedGatewayPayment = {
    provider: PaymentProvider;
    mode: GatewayMode;
    reference: string;
    providerReference: string | null;
    checkoutUrl: string;
    accessCode?: string | null;
    raw: unknown;
};
type VerifyGatewayPaymentInput = {
    provider: PaymentProvider;
    reference: string;
    amountKobo?: number | null;
    currency: string;
    metadata?: Prisma.JsonValue | null;
};
export type GatewayVerificationResult = {
    provider: PaymentProvider;
    mode: GatewayMode;
    reference: string;
    providerReference: string | null;
    paid: boolean;
    status: string;
    amountKobo: number | null;
    currency: string | null;
    raw: unknown;
    verifiedAt: string;
};
type ProviderRuntimeStatus = {
    provider: PaymentProvider;
    mode: GatewayMode;
    configured: boolean;
    baseUrl: string;
};
export declare class PaymentGatewayService {
    private readonly config;
    private readonly integrations;
    constructor(config: ConfigService, integrations: IntegrationConfigService);
    createReference(provider: PaymentProvider): string;
    getProviderRuntime(provider: PaymentProvider): ProviderRuntimeStatus;
    isProviderConfigured(provider: PaymentProvider): boolean;
    shouldVerifyGatewayPayment(metadata?: Prisma.JsonValue | null): boolean;
    initializePayment(input: InitializeGatewayPaymentInput): Promise<InitializedGatewayPayment>;
    verifyPayment(input: VerifyGatewayPaymentInput): Promise<GatewayVerificationResult>;
    private initializePaystackPayment;
    private initializeFlutterwavePayment;
    private initializeMonnifyPayment;
    private initializeStripePayment;
    private verifyPaystackPayment;
    private verifyFlutterwavePayment;
    private verifyMonnifyPayment;
    private verifyStripePayment;
    private verificationResult;
    private monnifyAccessToken;
    private fetchJson;
    private parseJson;
    private gatewayMessage;
    private requiredConfig;
    private hasUsableValue;
    private providerBaseUrl;
    private callbackUrl;
    private stripeReturnUrl;
    private apiBaseUrl;
    private toMajorCurrencyAmount;
    private toKobo;
    private gatewayMetadata;
    private stringValue;
    private get mode();
    private configValue;
    private integrationKey;
}
export {};
