import { ConfigService } from '@nestjs/config';
import Stripe from 'stripe';
import { ModelService } from '../model/model.service';
import { CreateTransferDto, ListAppointmentPayoutsQueryDto, OnboardingLinkDto } from './dto/payout-account.dto';
export declare class BankAccountService {
    private readonly model;
    private readonly config;
    private readonly logger;
    private readonly stripe;
    constructor(model: ModelService, config: ConfigService);
    createPayoutAccount(salonId: string, dto: OnboardingLinkDto): Promise<{
        businessType: string;
        payoutsEnabled: boolean;
        detailsSubmitted: boolean;
        requirementsCurrentlyDue: string[];
        disabledReason: string;
        url: string;
        expiresAt: Date;
    }>;
    refreshOnboardingLink(salonId: string, dto: OnboardingLinkDto): Promise<{
        businessType: string;
        payoutsEnabled: boolean;
        detailsSubmitted: boolean;
        requirementsCurrentlyDue: string[];
        disabledReason: string;
        url: string;
        expiresAt: Date;
    }>;
    createDashboardLink(salonId: string): Promise<{
        url: string;
    }>;
    getPayoutAccount(salonId: string): Promise<{
        configured: boolean;
    } | {
        bankAccounts: {
            id: string;
            bankName: string | null;
            last4: string;
            country: string;
            currency: string;
            accountHolderName: string | null;
            isDefault: boolean;
            status: string;
        }[];
        businessType: string;
        payoutsEnabled: boolean;
        detailsSubmitted: boolean;
        requirementsCurrentlyDue: string[];
        disabledReason: string;
        configured: boolean;
        requirementErrors: string[];
        stripeAccountId: string;
        country: string;
        currency: string;
    }>;
    createTransfer(salonId: string, dto: CreateTransferDto): Promise<{
        transferId: string;
        amount: number;
        currency: string;
        destination: string | Stripe.Account | null;
        created: Date;
    }>;
    payoutAppointment(appointmentId: string): Promise<{
        appointmentId: string;
        status: string;
        amount?: undefined;
    } | {
        appointmentId: string;
        status: string;
        amount: number;
    }>;
    retryPendingPayouts(salonId?: string): Promise<{
        appointments: number;
        transferred: number;
        failed: number;
        skippedSalons: {
            salonId: string;
            reason: string;
        }[];
        totalAmount: number;
    }>;
    listAppointmentPayouts(query: ListAppointmentPayoutsQueryDto): Promise<{
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
        summary: {
            totalPaid: number;
            totalTransferred: number;
            pendingAmount: number;
            counts: {
                pending: number;
                processing: number;
                transferred: number;
            };
        };
        data: {
            _id: any;
            salon: any;
            client: any;
            service: any;
            start: any;
            status: any;
            appointmentFee: any;
            depositAmount: any;
            remainingAmount: any;
            paymentStatus: any;
            paymentIntentId: any;
            amountPaid: any;
            payoutStatus: any;
            payoutAmount: any;
            payoutCurrency: any;
            payoutTransferId: any;
            payoutAt: any;
            payoutError: any;
            createdAt: any;
        }[];
    }>;
    private findPayableAccount;
    private platformFeePercent;
    private transferAppointmentPayment;
    private chargeSettlement;
    private transferReceivedAmount;
    private backfillReceivedAmounts;
    isConnectEvent(event: Stripe.Event): boolean;
    handleConnectEvent(event: Stripe.Event): Promise<{
        received: boolean;
    }>;
    private toObjectId;
    private findPayoutAccount;
    private getPayoutAccountOrThrow;
    private createOnboardingLink;
    private onboardingRedirectUrl;
    private retrieveAccount;
    private statusFromAccount;
    private requirementErrorsFromAccount;
    private syncAccountStatus;
    private listBankAccounts;
    private formatBankAccount;
    private callStripe;
    private rethrowStripeError;
}
