import { Prisma } from '@prisma/client';
import { AuditService } from '../audit/audit.service';
import { PrismaService } from '../database/prisma.service';
import { PaymentGatewayService } from '../payments/payment-gateway.service';
import { EstateAdminLeadSignupDto, InitializeEstatePaymentDto, RecordEstatePaymentDto, SelectSubscriptionPlanDto } from './dto/onboarding.dto';
export declare class OnboardingService {
    private readonly prisma;
    private readonly audit;
    private readonly paymentGateway;
    constructor(prisma: PrismaService, audit: AuditService, paymentGateway: PaymentGatewayService);
    listSubscriptionPlans(): Promise<{
        features: string[];
        description: string | null;
        id: string;
        metadata: Prisma.JsonValue;
        name: string;
        createdAt: Date;
        updatedAt: Date;
        code: string;
        minResidents: number;
        maxResidents: number | null;
        monthlyPriceKobo: number | null;
        oldMonthlyPriceKobo: number | null;
        currency: string;
        customPricing: boolean;
        ctaLabel: string | null;
        sortOrder: number;
        trialDays: number;
        gracePeriodDays: number;
        publicVisible: boolean;
        residentMarketingEnabled: boolean;
        limits: Prisma.JsonValue;
        isActive: boolean;
    }[]>;
    listPaymentProviders(estateId?: string): Promise<{
        provider: import(".prisma/client").$Enums.PaymentProvider;
        displayName: string;
        globallyEnabled: boolean;
        estateEnabled: boolean | null;
        effectiveEnabled: boolean;
        recommendedUseCases: string[];
        metadata: Prisma.JsonValue;
    }[]>;
    submitEstateAdminLead(dto: EstateAdminLeadSignupDto): Promise<{
        estate: {
            status: import(".prisma/client").$Enums.EstateStatus;
            id: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            location: string;
            unitCount: number;
            estateType: string | null;
            signupStatus: import(".prisma/client").$Enums.EstateSignupStatus;
            subscriptionStatus: import(".prisma/client").$Enums.SubscriptionStatus;
            subscriptionPlanId: string | null;
            selectedPaymentProvider: import(".prisma/client").$Enums.PaymentProvider | null;
            activatedAt: Date | null;
            rejectedAt: Date | null;
            suspendedAt: Date | null;
            reviewNotes: string | null;
            settings: Prisma.JsonValue;
            branding: Prisma.JsonValue;
            salesPartnerId: string | null;
        };
        admin: {
            id: string;
            name: string;
            phone: string;
            email: string | null;
            role: import(".prisma/client").$Enums.UserRole;
            status: import(".prisma/client").$Enums.AccountStatus;
        };
        nextStep: string;
    }>;
    selectSubscriptionPlan(estateId: string, dto: SelectSubscriptionPlanDto): Promise<{
        estate: {
            subscriptionPlan: {
                description: string | null;
                id: string;
                metadata: Prisma.JsonValue;
                name: string;
                createdAt: Date;
                updatedAt: Date;
                code: string;
                minResidents: number;
                maxResidents: number | null;
                monthlyPriceKobo: number | null;
                oldMonthlyPriceKobo: number | null;
                currency: string;
                customPricing: boolean;
                ctaLabel: string | null;
                sortOrder: number;
                trialDays: number;
                gracePeriodDays: number;
                publicVisible: boolean;
                residentMarketingEnabled: boolean;
                limits: Prisma.JsonValue;
                isActive: boolean;
            } | null;
        } & {
            status: import(".prisma/client").$Enums.EstateStatus;
            id: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            location: string;
            unitCount: number;
            estateType: string | null;
            signupStatus: import(".prisma/client").$Enums.EstateSignupStatus;
            subscriptionStatus: import(".prisma/client").$Enums.SubscriptionStatus;
            subscriptionPlanId: string | null;
            selectedPaymentProvider: import(".prisma/client").$Enums.PaymentProvider | null;
            activatedAt: Date | null;
            rejectedAt: Date | null;
            suspendedAt: Date | null;
            reviewNotes: string | null;
            settings: Prisma.JsonValue;
            branding: Prisma.JsonValue;
            salesPartnerId: string | null;
        };
        nextStep: string;
    }>;
    recordPayment(estateId: string, dto: RecordEstatePaymentDto): Promise<{
        payment: {
            plan: {
                description: string | null;
                id: string;
                metadata: Prisma.JsonValue;
                name: string;
                createdAt: Date;
                updatedAt: Date;
                code: string;
                minResidents: number;
                maxResidents: number | null;
                monthlyPriceKobo: number | null;
                oldMonthlyPriceKobo: number | null;
                currency: string;
                customPricing: boolean;
                ctaLabel: string | null;
                sortOrder: number;
                trialDays: number;
                gracePeriodDays: number;
                publicVisible: boolean;
                residentMarketingEnabled: boolean;
                limits: Prisma.JsonValue;
                isActive: boolean;
            };
        } & {
            status: import(".prisma/client").$Enums.PaymentStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            provider: import(".prisma/client").$Enums.PaymentProvider;
            createdAt: Date;
            updatedAt: Date;
            currency: string;
            planId: string;
            reference: string | null;
            amountKobo: number | null;
            confirmedById: string | null;
            confirmedAt: Date | null;
        };
        nextStep: string;
    }>;
    initializePayment(estateId: string, dto: InitializeEstatePaymentDto): Promise<{
        payment: {
            plan: {
                description: string | null;
                id: string;
                metadata: Prisma.JsonValue;
                name: string;
                createdAt: Date;
                updatedAt: Date;
                code: string;
                minResidents: number;
                maxResidents: number | null;
                monthlyPriceKobo: number | null;
                oldMonthlyPriceKobo: number | null;
                currency: string;
                customPricing: boolean;
                ctaLabel: string | null;
                sortOrder: number;
                trialDays: number;
                gracePeriodDays: number;
                publicVisible: boolean;
                residentMarketingEnabled: boolean;
                limits: Prisma.JsonValue;
                isActive: boolean;
            };
        } & {
            status: import(".prisma/client").$Enums.PaymentStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            provider: import(".prisma/client").$Enums.PaymentProvider;
            createdAt: Date;
            updatedAt: Date;
            currency: string;
            planId: string;
            reference: string | null;
            amountKobo: number | null;
            confirmedById: string | null;
            confirmedAt: Date | null;
        };
        checkout: {
            provider: import(".prisma/client").$Enums.PaymentProvider;
            mode: "sandbox" | "live";
            reference: string;
            providerReference: string | null;
            checkoutUrl: string;
            accessCode: string | null;
        };
        nextStep: string;
    }>;
    handlePaymentCallback(query: Record<string, unknown>): Promise<{
        status: string;
        nextStep: string;
        reference?: undefined;
        payment?: undefined;
    } | {
        status: string;
        reference: string;
        nextStep: string;
        payment?: undefined;
    } | {
        status: string;
        payment: {
            id: string;
            estateId: string;
            provider: import(".prisma/client").$Enums.PaymentProvider;
            reference: string | null;
            status: import(".prisma/client").$Enums.PaymentStatus;
        };
        nextStep: string;
        reference?: undefined;
    }>;
    private getEstateForOnboarding;
    private assertProviderEnabled;
    private resolvePaymentAmount;
    private jsonObject;
    private toJson;
    private queryString;
}
