import { Prisma } from '@prisma/client';
import { AuditService } from '../audit/audit.service';
import { GuardProfileRequirement, ResidentProfileRequirement } from '../common/profile-completion';
import { RequestUser } from '../common/request-user';
import { PrismaService } from '../database/prisma.service';
import { UpdateMyProfileDto } from './dto/profile.dto';
export declare class ProfileService {
    private readonly prisma;
    private readonly audit;
    constructor(prisma: PrismaService, audit: AuditService);
    getMe(user: RequestUser): Promise<{
        user: {
            [key: string]: unknown;
            refreshToken?: string | null;
        };
        profile: {
            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;
        } | ({
            assignedGate: {
                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.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;
        completion: import("../common/profile-completion").ProfileCompletionResult;
        estate: {
            id: string;
            name: string;
            location: string;
            currentPlan: {
                monthlyPriceKobo?: number | null | undefined;
                oldMonthlyPriceKobo?: number | null | undefined;
                currency?: string | undefined;
                customPricing?: boolean | undefined;
                features: string[];
                id: string;
                code: string;
                name: string;
                sortOrder: number;
                publicVisible: boolean;
                residentMarketingEnabled: boolean;
                description: string | null;
                limits: Prisma.JsonValue;
                metadata: Prisma.JsonValue;
            } | null;
            profileRequirements: {
                resident: ResidentProfileRequirement[];
                guard: GuardProfileRequirement[];
            };
            gates: {
                id: string;
                name: string;
                type: string;
                isActive: boolean;
            }[];
            settings: {
                announcements: {
                    allowedCategories: string[];
                    dailyPostingLimit: number;
                    approvalRequiredForFlaggedKeywords: boolean;
                };
                serviceChargePaymentsEnabled: boolean;
                residentRequestsEnabled: boolean;
                visitorFeaturesEnabled: boolean;
            };
        } | null;
        currentPlan: {
            monthlyPriceKobo?: number | null | undefined;
            oldMonthlyPriceKobo?: number | null | undefined;
            currency?: string | undefined;
            customPricing?: boolean | undefined;
            features: string[];
            id: string;
            code: string;
            name: string;
            sortOrder: number;
            publicVisible: boolean;
            residentMarketingEnabled: boolean;
            description: string | null;
            limits: Prisma.JsonValue;
            metadata: Prisma.JsonValue;
        } | null;
        featureAvailability: {
            serviceChargePayments: boolean;
            residentRequests: boolean;
            announcements: boolean;
            visitorPasses: boolean;
        };
        planComparison: {
            showPricing: boolean;
            current: {
                monthlyPriceKobo?: number | null | undefined;
                oldMonthlyPriceKobo?: number | null | undefined;
                currency?: string | undefined;
                customPricing?: boolean | undefined;
                features: string[];
                id: string;
                code: string;
                name: string;
                sortOrder: number;
                publicVisible: boolean;
                residentMarketingEnabled: boolean;
                description: string | null;
                limits: Prisma.JsonValue;
                metadata: Prisma.JsonValue;
            };
            upgrades: {
                monthlyPriceKobo?: number | null | undefined;
                oldMonthlyPriceKobo?: number | null | undefined;
                currency?: string | undefined;
                customPricing?: boolean | undefined;
                features: string[];
                id: string;
                code: string;
                name: string;
                sortOrder: number;
                publicVisible: boolean;
                residentMarketingEnabled: boolean;
                description: string | null;
                limits: Prisma.JsonValue;
                metadata: Prisma.JsonValue;
            }[];
        } | null;
    }>;
    updateMe(user: RequestUser, dto: UpdateMyProfileDto): Promise<{
        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;
        };
        profile: unknown;
        completion: import("../common/profile-completion").ProfileCompletionResult;
    }>;
    getDemoAccess(user: RequestUser): Promise<{
        approved: boolean;
        roleRequired: "ESTATE_ADMIN";
        estate: {
            id: string;
            name: string;
        };
        expiresAt: string;
        maxSessionMinutes: number;
        reason: string | null;
    }>;
    assertUsableProfile(user: RequestUser, feature: string): Promise<void>;
    private getResidentPlanComparison;
    private serializePlan;
    private serializeEstate;
    private serializeFeatureAvailability;
    private planSupportsServiceChargePayments;
    private publicProfileRequirements;
    private publicAnnouncementSettings;
    private profileCompletionOptions;
    private residentRequiredFields;
    private guardRequiredFields;
    private settingsArray;
    private roleProfileSettings;
    private filterRequirements;
    private stringArray;
    private jsonObject;
    private dateString;
    private futureIsoDate;
    private redactAccount;
    private fullName;
    private clean;
    private mergeJson;
    private toJson;
}
