import { EstateSignupStatus, EstateStatus, PaymentProvider, Prisma, SubscriptionStatus } from '@prisma/client';
import { AuditService } from '../audit/audit.service';
import { OtpService } from '../auth/otp.service';
import { RequestUser } from '../common/request-user';
import { PrismaService } from '../database/prisma.service';
import { FeatureAccessService } from '../features/feature-access.service';
import { IntegrationConfigService } from '../integrations/integration-config.service';
import { PaymentGatewayService } from '../payments/payment-gateway.service';
import { UpdateEstateDto, AssignEstatePartnerDto, ContactEstateAdminDto, ConfirmEstatePaymentDto, CreateSubscriptionPlanDto, UpdateGuardDto, UpdateIncidentDto, UpdatePaymentProviderSettingDto, UpdateResidentDto, UpdateSubscriptionPlanDto, UpdateUserDto, UpdateVisitorDto, UpdateVisitorPassDto, ReviewEstateSignupDto, UpdateSalesPartnerProfileDto, UpdateOtpConfigDto, UpdateIntegrationConfigDto } from './dto/admin.dto';
export declare class AdminService {
    private readonly prisma;
    private readonly audit;
    private readonly paymentGateway;
    private readonly otp;
    private readonly integrations;
    private readonly featureAccess;
    constructor(prisma: PrismaService, audit: AuditService, paymentGateway: PaymentGatewayService, otp: OtpService, integrations: IntegrationConfigService, featureAccess: FeatureAccessService);
    dashboard(actor: RequestUser): Promise<{
        totals: Record<string, number>;
        recentAuditLogs: {
            id: string;
            actorType: string;
            actorId: string;
            action: string;
            metadata: Prisma.JsonValue;
            timestamp: Date;
            estateId: string | null;
        }[];
    }>;
    listUsers(actor: RequestUser, estateId?: string, role?: string, status?: string): 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;
        } | null;
        resident: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            blockNumber: string | null;
            flatNumber: string | null;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            unit: string;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            residentCode: string;
            householdMembers: Prisma.JsonValue;
            userId: string;
        } | null;
        guard: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            guardCode: string;
            assignedGateId: string | null;
            assignedShifts: Prisma.JsonValue;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            deviceId: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            userId: string;
        } | null;
    } & {
        status: import(".prisma/client").$Enums.AccountStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string | null;
        name: string;
        firstName: string | null;
        lastName: string | null;
        phone: string;
        address: string | null;
        profileConfirmed: boolean;
        profilePictureUrl: string | null;
        refreshToken: string | null;
        role: import(".prisma/client").$Enums.UserRole;
        email: string | null;
        createdAt: Date;
        updatedAt: Date;
        profilePictureThumbnailUrl: string | null;
        profileCompletion: number;
        phoneVerifiedAt: Date | null;
        emailVerifiedAt: Date | null;
    })[]>;
    listEstates(actor: RequestUser): Promise<({
        salesPartner: {
            id: string;
            name: string;
            phone: string;
            role: import(".prisma/client").$Enums.UserRole;
        } | 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;
    })[]>;
    listEstateSignups(status: string | undefined, actor: RequestUser): Promise<({
        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;
        gates: {
            description: string | null;
            type: import(".prisma/client").$Enums.EstateGateType;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            isActive: boolean;
        }[];
        guards: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            guardCode: string;
            assignedGateId: string | null;
            assignedShifts: Prisma.JsonValue;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            deviceId: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            userId: string;
        }[];
        residents: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            blockNumber: string | null;
            flatNumber: string | null;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            unit: string;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            residentCode: string;
            householdMembers: Prisma.JsonValue;
            userId: string;
        }[];
        notifications: {
            status: import(".prisma/client").$Enums.NotificationStatus;
            data: Prisma.JsonValue;
            id: string;
            estateId: string;
            title: string;
            channel: import(".prisma/client").$Enums.NotificationChannel;
            createdAt: Date;
            userId: string | null;
            body: string;
            announcementId: string | null;
            readAt: Date | null;
            sentAt: Date | null;
        }[];
        salesPartner: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string | null;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            refreshToken: string | null;
            role: import(".prisma/client").$Enums.UserRole;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            phoneVerifiedAt: Date | null;
            emailVerifiedAt: Date | null;
        } | null;
        users: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string | null;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            refreshToken: string | null;
            role: import(".prisma/client").$Enums.UserRole;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            phoneVerifiedAt: Date | null;
            emailVerifiedAt: Date | null;
        }[];
        visitors: {
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string | null;
            name: string;
            phone: string | null;
            createdAt: Date;
            updatedAt: Date;
            photoUrl: string | null;
            vehiclePlate: string | null;
            riskScore: number;
            flagged: boolean;
            blacklisted: boolean;
            riskNotes: string | null;
            riskLevel: import(".prisma/client").$Enums.VisitorRiskLevel;
        }[];
        passes: {
            status: import(".prisma/client").$Enums.VisitorPassStatus;
            id: string;
            estateId: string;
            createdAt: Date;
            updatedAt: Date;
            passType: import(".prisma/client").$Enums.VisitorPassType;
            validFrom: Date;
            validUntil: Date;
            maxEntries: number;
            entryCount: number;
            visitorId: string;
            hostResidentId: string;
            visitorCode: string;
            qrToken: string;
            revokedAt: Date | null;
        }[];
        sessions: {
            status: import(".prisma/client").$Enums.VisitSessionStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            deviceId: string | null;
            createdAt: Date;
            updatedAt: Date;
            guardId: string;
            hostResidentId: string | null;
            visitorPassId: string;
            gateId: string | null;
            visitorPhone: string | null;
            checkinTime: Date;
            checkoutTime: Date | null;
            entryGate: string | null;
            exitGate: string | null;
            offlineEventId: string | null;
            scanLocation: Prisma.JsonValue;
        }[];
        incidents: {
            description: string;
            type: string;
            id: string;
            metadata: Prisma.JsonValue;
            timestamp: Date;
            estateId: string;
            guardId: string;
        }[];
        auditLogs: {
            id: string;
            actorType: string;
            actorId: string;
            action: string;
            metadata: Prisma.JsonValue;
            timestamp: Date;
            estateId: string | null;
        }[];
        paymentProviderOverrides: {
            id: string;
            estateId: string;
            provider: import(".prisma/client").$Enums.PaymentProvider;
            enabled: boolean;
            createdAt: Date;
            updatedAt: Date;
        }[];
        roleFeatureSettings: {
            id: string;
            estateId: string;
            role: import(".prisma/client").$Enums.UserRole;
            enabled: boolean;
            updatedById: string | null;
            createdAt: Date;
            updatedAt: Date;
            feature: string;
        }[];
        payments: {
            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;
        }[];
        announcements: {
            status: import(".prisma/client").$Enums.AnnouncementStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            title: string;
            category: import(".prisma/client").$Enums.AnnouncementCategory;
            createdAt: Date;
            updatedAt: Date;
            body: string;
            authorId: string;
            priority: import(".prisma/client").$Enums.AnnouncementPriority;
            targetRoles: string[];
            targetUserIds: string[];
            deliveryChannels: import(".prisma/client").$Enums.NotificationChannel[];
            publishedAt: Date | null;
            expiresAt: Date | null;
        }[];
        residentRequests: {
            description: string;
            status: import(".prisma/client").$Enums.ResidentRequestStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            title: string;
            category: import(".prisma/client").$Enums.ResidentRequestCategory;
            createdAt: Date;
            updatedAt: Date;
            residentId: string;
            priority: import(".prisma/client").$Enums.ResidentRequestPriority;
            requestCode: string;
            assignedToId: string | null;
            resolvedAt: Date | null;
            closedAt: Date | null;
        }[];
        _count: {
            subscriptionPlan: number;
            salesPartner: number;
            users: number;
            residents: number;
            visitors: number;
            guards: number;
            passes: number;
            sessions: number;
            incidents: number;
            auditLogs: number;
            paymentProviderOverrides: number;
            roleFeatureSettings: number;
            payments: number;
            gates: number;
            announcements: number;
            residentRequests: number;
            notifications: number;
        };
    } & {
        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;
    })[]>;
    listSubscriptionPlans(includeInactive?: string): Promise<{
        features: string[];
    }[]>;
    getOtpConfig(): {
        provider: import("../auth/otp.types").OtpDeliveryProvider;
        enabledProviders: import("../auth/otp.types").OtpDeliveryProvider[];
        providerPriority: import("../auth/otp.types").OtpDeliveryProvider[];
        availableProviders: import("../auth/otp.types").OtpDeliveryProvider[];
        providers: {
            provider: import("../auth/otp.types").OtpDeliveryProvider;
            enabled: boolean;
            priority: number | null;
            configured: boolean;
            activePrimary: boolean;
        }[];
        codeLength: number;
        expiresInSeconds: number;
        maxAttempts: number;
        devOtpExposed: boolean;
        termii: {
            configured: boolean;
            baseUrl: string;
            senderId: string;
            channel: string;
        };
        africasTalking: {
            configured: boolean;
            baseUrl: string;
            username: string;
            senderId: string;
        };
        customHttp: {
            configured: boolean;
            url: string;
            method: string;
            hasHeaders: boolean;
            hasBodyTemplate: boolean;
        };
        note: string;
    };
    updateOtpConfig(dto: UpdateOtpConfigDto, actor: RequestUser): Promise<{
        provider: import("../auth/otp.types").OtpDeliveryProvider;
        enabledProviders: import("../auth/otp.types").OtpDeliveryProvider[];
        providerPriority: import("../auth/otp.types").OtpDeliveryProvider[];
        availableProviders: import("../auth/otp.types").OtpDeliveryProvider[];
        providers: {
            provider: import("../auth/otp.types").OtpDeliveryProvider;
            enabled: boolean;
            priority: number | null;
            configured: boolean;
            activePrimary: boolean;
        }[];
        codeLength: number;
        expiresInSeconds: number;
        maxAttempts: number;
        devOtpExposed: boolean;
        termii: {
            configured: boolean;
            baseUrl: string;
            senderId: string;
            channel: string;
        };
        africasTalking: {
            configured: boolean;
            baseUrl: string;
            username: string;
            senderId: string;
        };
        customHttp: {
            configured: boolean;
            url: string;
            method: string;
            hasHeaders: boolean;
            hasBodyTemplate: boolean;
        };
        note: string;
    }>;
    listIntegrationTemplates(): import("../integrations/integration-config.types").IntegrationTemplate[];
    listIntegrationConfigs(): {
        category: string;
        provider: string;
        displayName: string;
        enabled: boolean;
        configured: boolean;
        publicConfig: Record<string, unknown>;
        secrets: {
            [k: string]: {
                configured: boolean;
                masked: string | null;
            };
        };
        template: {
            publicKeys: string[];
            secretKeys: string[];
            description: string;
        } | null;
        updatedById: string | null;
        updatedAt: Date | null;
    }[];
    getIntegrationConfig(provider: string): {
        category: string;
        provider: string;
        displayName: string;
        enabled: boolean;
        configured: boolean;
        publicConfig: Record<string, unknown>;
        secrets: {
            [k: string]: {
                configured: boolean;
                masked: string | null;
            };
        };
        template: {
            publicKeys: string[];
            secretKeys: string[];
            description: string;
        } | null;
        updatedById: string | null;
        updatedAt: Date | null;
    };
    updateIntegrationConfig(provider: string, dto: UpdateIntegrationConfigDto, actor: RequestUser): Promise<{
        category: string;
        provider: string;
        displayName: string;
        enabled: boolean;
        configured: boolean;
        publicConfig: Record<string, unknown>;
        secrets: {
            [k: string]: {
                configured: boolean;
                masked: string | null;
            };
        };
        template: {
            publicKeys: string[];
            secretKeys: string[];
            description: string;
        } | null;
        updatedById: string | null;
        updatedAt: Date | null;
    }>;
    createSubscriptionPlan(dto: CreateSubscriptionPlanDto, actor: RequestUser): Promise<{
        features: string[];
    }>;
    updateSubscriptionPlan(code: string, dto: UpdateSubscriptionPlanDto, actor: RequestUser): Promise<{
        features: string[];
    }>;
    listPaymentProviders(estateId?: string): Promise<{
        provider: import(".prisma/client").$Enums.PaymentProvider;
        displayName: string;
        globallyEnabled: boolean;
        estateEnabled: boolean | null;
        effectiveEnabled: boolean;
        sandboxMode: "sandbox" | "live";
        sandboxConfigured: boolean;
        sandboxBaseUrl: string;
        recommendedUseCases: string[];
        metadata: Prisma.JsonValue;
    }[]>;
    updateGlobalPaymentProvider(provider: PaymentProvider, dto: UpdatePaymentProviderSettingDto, actor: RequestUser): Promise<{
        id: string;
        metadata: Prisma.JsonValue;
        provider: import(".prisma/client").$Enums.PaymentProvider;
        displayName: string;
        enabled: boolean;
        createdAt: Date;
        updatedAt: Date;
        recommendedUseCases: string[];
    }>;
    updateEstatePaymentProvider(estateId: string, provider: PaymentProvider, dto: UpdatePaymentProviderSettingDto, actor: RequestUser): Promise<{
        id: string;
        estateId: string;
        provider: import(".prisma/client").$Enums.PaymentProvider;
        enabled: boolean;
        createdAt: Date;
        updatedAt: Date;
    }>;
    listSalesPartners(): Promise<{
        id: string;
        name: string;
        phone: string;
        role: import(".prisma/client").$Enums.UserRole;
        status: import(".prisma/client").$Enums.AccountStatus;
        profileLabel: string;
        partnerProfile: {
            enabled: boolean;
            commissionPercent: number;
            notes: string | null;
        };
        assignedEstates: {
            id: string;
            name: string;
            location: string;
            status: EstateStatus;
            signupStatus: EstateSignupStatus;
            subscriptionStatus: SubscriptionStatus;
        }[];
    }[]>;
    getMySalesPartnerProfile(actor: RequestUser): Promise<{
        id: string;
        name: string;
        phone: string;
        role: import(".prisma/client").$Enums.UserRole;
        status: import(".prisma/client").$Enums.AccountStatus;
        profileLabel: string;
        partnerProfile: {
            enabled: boolean;
            commissionPercent: number;
            notes: string | null;
        };
        assignedEstates: {
            id: string;
            name: string;
            location: string;
            status: EstateStatus;
            signupStatus: EstateSignupStatus;
            subscriptionStatus: SubscriptionStatus;
        }[];
    }>;
    updateSalesPartnerProfile(salesAdminId: string, dto: UpdateSalesPartnerProfileDto, actor: RequestUser): Promise<{
        id: string;
        name: string;
        phone: string;
        role: import(".prisma/client").$Enums.UserRole;
        status: import(".prisma/client").$Enums.AccountStatus;
        profileLabel: string;
        partnerProfile: {
            enabled: boolean;
            commissionPercent: number;
            notes: string | null;
        };
        assignedEstates: {
            id: string;
            name: string;
            location: string;
            status: EstateStatus;
            signupStatus: EstateSignupStatus;
            subscriptionStatus: SubscriptionStatus;
        }[];
    }>;
    assignEstateSalesPartner(estateId: string, dto: AssignEstatePartnerDto, actor: RequestUser): Promise<{
        salesPartner: {
            id: string;
            name: string;
            phone: string;
            role: import(".prisma/client").$Enums.UserRole;
        } | 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;
    }>;
    getSalesPartnerEarnings(salesAdminId: string, actor: RequestUser): Promise<{
        salesAdmin: {
            id: string;
            name: string;
            phone: string;
            role: "SALES_ADMIN";
            profileLabel: string;
        };
        partnerProfile: {
            enabled: boolean;
            commissionPercent: number;
            notes: string | null;
        };
        totals: {
            confirmedPayments: number;
            totalSalesKobo: number;
            estimatedEarningsKobo: number;
            currency: string;
        };
        payments: {
            id: string;
            estateId: string;
            estate: {
                id: string;
                name: string;
                location: string;
            };
            plan: {
                name: string;
                code: string;
            };
            amountKobo: number | null;
            currency: string;
            reference: string | null;
            confirmedAt: Date | null;
        }[];
    }>;
    getMySalesPartnerEarnings(actor: RequestUser): Promise<{
        salesAdmin: {
            id: string;
            name: string;
            phone: string;
            role: "SALES_ADMIN";
            profileLabel: string;
        };
        partnerProfile: {
            enabled: boolean;
            commissionPercent: number;
            notes: string | null;
        };
        totals: {
            confirmedPayments: number;
            totalSalesKobo: number;
            estimatedEarningsKobo: number;
            currency: string;
        };
        payments: {
            id: string;
            estateId: string;
            estate: {
                id: string;
                name: string;
                location: string;
            };
            plan: {
                name: string;
                code: string;
            };
            amountKobo: number | null;
            currency: string;
            reference: string | null;
            confirmedAt: Date | null;
        }[];
    }>;
    contactEstateAdmin(estateId: string, dto: ContactEstateAdminDto, actor: RequestUser): Promise<{
        status: string;
        estate: {
            id: string;
            name: string;
        };
        recipients: {
            id: string;
            name: string;
            phone: string;
        }[];
        channel: "SMS" | "EMAIL" | "WHATSAPP" | "CALL";
    }>;
    listResidents(actor: RequestUser, estateId?: string): 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;
        };
        user: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string | null;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            refreshToken: string | null;
            role: import(".prisma/client").$Enums.UserRole;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            phoneVerifiedAt: Date | null;
            emailVerifiedAt: Date | null;
        };
    } & {
        status: import(".prisma/client").$Enums.AccountStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string;
        name: string;
        firstName: string | null;
        lastName: string | null;
        phone: string;
        blockNumber: string | null;
        flatNumber: string | null;
        address: string | null;
        profileConfirmed: boolean;
        profilePictureUrl: string | null;
        emergencyContact: Prisma.JsonValue;
        unit: string;
        email: string | null;
        createdAt: Date;
        updatedAt: Date;
        profilePictureThumbnailUrl: string | null;
        profileCompletion: number;
        residentCode: string;
        householdMembers: Prisma.JsonValue;
        userId: string;
    })[]>;
    listGuards(actor: RequestUser, estateId?: string): 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;
        };
        user: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string | null;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            refreshToken: string | null;
            role: import(".prisma/client").$Enums.UserRole;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            phoneVerifiedAt: Date | null;
            emailVerifiedAt: Date | null;
        };
    } & {
        status: import(".prisma/client").$Enums.AccountStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string;
        name: string;
        firstName: string | null;
        lastName: string | null;
        phone: string;
        address: string | null;
        profileConfirmed: boolean;
        guardCode: string;
        assignedGateId: string | null;
        assignedShifts: Prisma.JsonValue;
        profilePictureUrl: string | null;
        emergencyContact: Prisma.JsonValue;
        deviceId: string | null;
        createdAt: Date;
        updatedAt: Date;
        profilePictureThumbnailUrl: string | null;
        profileCompletion: number;
        userId: string;
    })[]>;
    listVisitors(actor: RequestUser, estateId?: string): 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;
        } | null;
    } & {
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string | null;
        name: string;
        phone: string | null;
        createdAt: Date;
        updatedAt: Date;
        photoUrl: string | null;
        vehiclePlate: string | null;
        riskScore: number;
        flagged: boolean;
        blacklisted: boolean;
        riskNotes: string | null;
        riskLevel: import(".prisma/client").$Enums.VisitorRiskLevel;
    })[]>;
    listVisitorPasses(actor: RequestUser, estateId?: string, status?: string): 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;
        };
        visitor: {
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string | null;
            name: string;
            phone: string | null;
            createdAt: Date;
            updatedAt: Date;
            photoUrl: string | null;
            vehiclePlate: string | null;
            riskScore: number;
            flagged: boolean;
            blacklisted: boolean;
            riskNotes: string | null;
            riskLevel: import(".prisma/client").$Enums.VisitorRiskLevel;
        };
        hostResident: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            blockNumber: string | null;
            flatNumber: string | null;
            address: string | null;
            profileConfirmed: boolean;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            unit: string;
            email: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            residentCode: string;
            householdMembers: Prisma.JsonValue;
            userId: string;
        };
    } & {
        status: import(".prisma/client").$Enums.VisitorPassStatus;
        id: string;
        estateId: string;
        createdAt: Date;
        updatedAt: Date;
        passType: import(".prisma/client").$Enums.VisitorPassType;
        validFrom: Date;
        validUntil: Date;
        maxEntries: number;
        entryCount: number;
        visitorId: string;
        hostResidentId: string;
        visitorCode: string;
        qrToken: string;
        revokedAt: Date | null;
    })[]>;
    listVisitSessions(actor: RequestUser, estateId?: string): 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;
        };
        visitorPass: {
            visitor: {
                id: string;
                metadata: Prisma.JsonValue;
                estateId: string | null;
                name: string;
                phone: string | null;
                createdAt: Date;
                updatedAt: Date;
                photoUrl: string | null;
                vehiclePlate: string | null;
                riskScore: number;
                flagged: boolean;
                blacklisted: boolean;
                riskNotes: string | null;
                riskLevel: import(".prisma/client").$Enums.VisitorRiskLevel;
            };
            hostResident: {
                status: import(".prisma/client").$Enums.AccountStatus;
                id: string;
                metadata: Prisma.JsonValue;
                estateId: string;
                name: string;
                firstName: string | null;
                lastName: string | null;
                phone: string;
                blockNumber: string | null;
                flatNumber: string | null;
                address: string | null;
                profileConfirmed: boolean;
                profilePictureUrl: string | null;
                emergencyContact: Prisma.JsonValue;
                unit: string;
                email: string | null;
                createdAt: Date;
                updatedAt: Date;
                profilePictureThumbnailUrl: string | null;
                profileCompletion: number;
                residentCode: string;
                householdMembers: Prisma.JsonValue;
                userId: string;
            };
        } & {
            status: import(".prisma/client").$Enums.VisitorPassStatus;
            id: string;
            estateId: string;
            createdAt: Date;
            updatedAt: Date;
            passType: import(".prisma/client").$Enums.VisitorPassType;
            validFrom: Date;
            validUntil: Date;
            maxEntries: number;
            entryCount: number;
            visitorId: string;
            hostResidentId: string;
            visitorCode: string;
            qrToken: string;
            revokedAt: Date | null;
        };
        guard: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            guardCode: string;
            assignedGateId: string | null;
            assignedShifts: Prisma.JsonValue;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            deviceId: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            userId: string;
        };
        gate: {
            description: string | null;
            type: import(".prisma/client").$Enums.EstateGateType;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            isActive: boolean;
        } | null;
    } & {
        status: import(".prisma/client").$Enums.VisitSessionStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string;
        deviceId: string | null;
        createdAt: Date;
        updatedAt: Date;
        guardId: string;
        hostResidentId: string | null;
        visitorPassId: string;
        gateId: string | null;
        visitorPhone: string | null;
        checkinTime: Date;
        checkoutTime: Date | null;
        entryGate: string | null;
        exitGate: string | null;
        offlineEventId: string | null;
        scanLocation: Prisma.JsonValue;
    })[]>;
    listIncidents(actor: RequestUser, estateId?: string): 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;
        };
        guard: {
            status: import(".prisma/client").$Enums.AccountStatus;
            id: string;
            metadata: Prisma.JsonValue;
            estateId: string;
            name: string;
            firstName: string | null;
            lastName: string | null;
            phone: string;
            address: string | null;
            profileConfirmed: boolean;
            guardCode: string;
            assignedGateId: string | null;
            assignedShifts: Prisma.JsonValue;
            profilePictureUrl: string | null;
            emergencyContact: Prisma.JsonValue;
            deviceId: string | null;
            createdAt: Date;
            updatedAt: Date;
            profilePictureThumbnailUrl: string | null;
            profileCompletion: number;
            userId: string;
        };
    } & {
        description: string;
        type: string;
        id: string;
        metadata: Prisma.JsonValue;
        timestamp: Date;
        estateId: string;
        guardId: string;
    })[]>;
    listAuditLogs(estateId: string | undefined, actor: RequestUser): Promise<{
        id: string;
        actorType: string;
        actorId: string;
        action: string;
        metadata: Prisma.JsonValue;
        timestamp: Date;
        estateId: string | null;
    }[]>;
    updateEstate(id: string, dto: UpdateEstateDto, actor: RequestUser): Promise<{
        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;
    }>;
    updateUser(id: string, dto: UpdateUserDto, actor: RequestUser): Promise<{
        status: import(".prisma/client").$Enums.AccountStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string | null;
        name: string;
        firstName: string | null;
        lastName: string | null;
        phone: string;
        address: string | null;
        profileConfirmed: boolean;
        profilePictureUrl: string | null;
        refreshToken: string | null;
        role: import(".prisma/client").$Enums.UserRole;
        email: string | null;
        createdAt: Date;
        updatedAt: Date;
        profilePictureThumbnailUrl: string | null;
        profileCompletion: number;
        phoneVerifiedAt: Date | null;
        emailVerifiedAt: Date | null;
    }>;
    updateResident(id: string, dto: UpdateResidentDto, actor: RequestUser): Promise<{
        status: import(".prisma/client").$Enums.AccountStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string;
        name: string;
        firstName: string | null;
        lastName: string | null;
        phone: string;
        blockNumber: string | null;
        flatNumber: string | null;
        address: string | null;
        profileConfirmed: boolean;
        profilePictureUrl: string | null;
        emergencyContact: Prisma.JsonValue;
        unit: string;
        email: string | null;
        createdAt: Date;
        updatedAt: Date;
        profilePictureThumbnailUrl: string | null;
        profileCompletion: number;
        residentCode: string;
        householdMembers: Prisma.JsonValue;
        userId: string;
    }>;
    updateGuard(id: string, dto: UpdateGuardDto, actor: RequestUser): Promise<{
        status: import(".prisma/client").$Enums.AccountStatus;
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string;
        name: string;
        firstName: string | null;
        lastName: string | null;
        phone: string;
        address: string | null;
        profileConfirmed: boolean;
        guardCode: string;
        assignedGateId: string | null;
        assignedShifts: Prisma.JsonValue;
        profilePictureUrl: string | null;
        emergencyContact: Prisma.JsonValue;
        deviceId: string | null;
        createdAt: Date;
        updatedAt: Date;
        profilePictureThumbnailUrl: string | null;
        profileCompletion: number;
        userId: string;
    }>;
    updateVisitor(id: string, dto: UpdateVisitorDto, actor: RequestUser): Promise<{
        id: string;
        metadata: Prisma.JsonValue;
        estateId: string | null;
        name: string;
        phone: string | null;
        createdAt: Date;
        updatedAt: Date;
        photoUrl: string | null;
        vehiclePlate: string | null;
        riskScore: number;
        flagged: boolean;
        blacklisted: boolean;
        riskNotes: string | null;
        riskLevel: import(".prisma/client").$Enums.VisitorRiskLevel;
    }>;
    updateVisitorPass(id: string, dto: UpdateVisitorPassDto, actor: RequestUser): Promise<{
        status: import(".prisma/client").$Enums.VisitorPassStatus;
        id: string;
        estateId: string;
        createdAt: Date;
        updatedAt: Date;
        passType: import(".prisma/client").$Enums.VisitorPassType;
        validFrom: Date;
        validUntil: Date;
        maxEntries: number;
        entryCount: number;
        visitorId: string;
        hostResidentId: string;
        visitorCode: string;
        qrToken: string;
        revokedAt: Date | null;
    }>;
    updateIncident(id: string, dto: UpdateIncidentDto, actor: RequestUser): Promise<{
        description: string;
        type: string;
        id: string;
        metadata: Prisma.JsonValue;
        timestamp: Date;
        estateId: string;
        guardId: string;
    }>;
    reviewEstateSignup(estateId: string, dto: ReviewEstateSignupDto, actor: RequestUser): Promise<{
        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;
    }>;
    confirmEstatePayment(estateId: string, dto: ConfirmEstatePaymentDto, actor: RequestUser): 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;
        };
        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;
        };
    }>;
    private verifyGatewayPaymentIfNeeded;
    private assertPaymentProvider;
    private jsonObject;
    private toJson;
    private canViewPaymentDetails;
    private auditLogPaymentVisibilityWhere;
    private resolveManagedEstateWhere;
    private resolveManagedEstateIdFilter;
    private assertCanAccessEstate;
    private assertCanAccessUserEstate;
    private serializeSubscriptionPlan;
    private serializeSalesPartner;
    private withAdminAudit;
}
