import { Prisma, ResidentRequestStatus } from '@prisma/client';
import { AuditService } from '../audit/audit.service';
import { RequestUser } from '../common/request-user';
import { PrismaService } from '../database/prisma.service';
import { CreateResidentRequestDto, RespondResidentRequestDto } from './dto/request.dto';
export declare class RequestsService {
    private readonly prisma;
    private readonly audit;
    constructor(prisma: PrismaService, audit: AuditService);
    findAll(user: RequestUser, estateId?: string, residentId?: string, status?: ResidentRequestStatus): Promise<({
        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;
        };
        messages: ({
            author: {
                id: string;
                name: string;
                role: import(".prisma/client").$Enums.UserRole;
            };
        } & {
            id: string;
            metadata: Prisma.JsonValue;
            createdAt: Date;
            message: string;
            authorId: string;
            requestId: string;
        })[];
    } & {
        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;
    })[]>;
    getOptions(): {
        categories: readonly [{
            readonly label: "Security Risk";
            readonly category: "SECURITY";
            readonly metadataKey: "SECURITY_RISK";
        }, {
            readonly label: "Street Light Issue";
            readonly category: "INFRASTRUCTURE";
            readonly metadataKey: "STREET_LIGHT_ISSUE";
        }, {
            readonly label: "Environment Issue";
            readonly category: "ESTATE_SERVICES";
            readonly metadataKey: "ENVIRONMENT_ISSUE";
        }, {
            readonly label: "Debris/Waste";
            readonly category: "ESTATE_SERVICES";
            readonly metadataKey: "DEBRIS_WASTE";
        }, {
            readonly label: "Noise Complaint";
            readonly category: "ESTATE_SERVICES";
            readonly metadataKey: "NOISE_COMPLAINT";
        }, {
            readonly label: "Maintenance";
            readonly category: "INFRASTRUCTURE";
            readonly metadataKey: "MAINTENANCE";
        }, {
            readonly label: "Water Issue";
            readonly category: "INFRASTRUCTURE";
            readonly metadataKey: "WATER_ISSUE";
        }, {
            readonly label: "Power/Electricity Issue";
            readonly category: "INFRASTRUCTURE";
            readonly metadataKey: "POWER_ELECTRICITY_ISSUE";
        }, {
            readonly label: "Security Support";
            readonly category: "SECURITY";
            readonly metadataKey: "SECURITY_SUPPORT";
        }, {
            readonly label: "Infrastructure";
            readonly category: "INFRASTRUCTURE";
            readonly metadataKey: "INFRASTRUCTURE";
        }, {
            readonly label: "Other";
            readonly category: "SUPPORT";
            readonly metadataKey: "OTHER";
        }];
        priorities: readonly [{
            readonly label: "Low";
            readonly value: "LOW";
        }, {
            readonly label: "Normal";
            readonly value: "NORMAL";
        }, {
            readonly label: "High";
            readonly value: "HIGH";
        }, {
            readonly label: "Urgent";
            readonly value: "URGENT";
        }];
        fields: string[];
        photoUploadOptional: boolean;
    };
    create(dto: CreateResidentRequestDto, user: RequestUser): Promise<{
        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;
        };
    } & {
        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;
    }>;
    respond(id: string, dto: RespondResidentRequestDto, user: RequestUser): Promise<{
        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;
        };
    } & {
        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;
    }>;
    private notifyEstateSecurity;
    private categoryLabel;
    private getResidentForUser;
    private toJson;
}
