import { AnnouncementAudience, ParkingReportStatus } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
export declare class CommunityService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    private assertComplexAccess;
    createVisitorPass(user: AuthenticatedUser, dto: {
        complexId: string;
        visitorName: string;
        visitorPhone?: string;
        purpose?: string;
        validFrom?: Date;
        validUntil: Date;
    }): Promise<{
        id: string;
        createdAt: Date;
        status: import(".prisma/client").$Enums.VisitorPassStatus;
        complexId: string;
        residentId: string;
        purpose: string | null;
        usedAt: Date | null;
        validFrom: Date;
        validUntil: Date;
        visitorName: string;
        visitorPhone: string | null;
        qrToken: string;
    }>;
    listVisitorPasses(user: AuthenticatedUser, complexId?: string): Promise<{
        id: string;
        createdAt: Date;
        status: import(".prisma/client").$Enums.VisitorPassStatus;
        complexId: string;
        residentId: string;
        purpose: string | null;
        usedAt: Date | null;
        validFrom: Date;
        validUntil: Date;
        visitorName: string;
        visitorPhone: string | null;
        qrToken: string;
    }[]>;
    scanVisitorPass(qrToken: string): Promise<{
        granted: boolean;
        reason: string;
        pass?: undefined;
    } | {
        granted: boolean;
        pass: {
            id: string;
            visitorName: string;
            purpose: string | null;
            residentId: string;
        };
        reason?: undefined;
    }>;
    revokeVisitorPass(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        createdAt: Date;
        status: import(".prisma/client").$Enums.VisitorPassStatus;
        complexId: string;
        residentId: string;
        purpose: string | null;
        usedAt: Date | null;
        validFrom: Date;
        validUntil: Date;
        visitorName: string;
        visitorPhone: string | null;
        qrToken: string;
    }>;
    createParkingReport(user: AuthenticatedUser, dto: {
        complexId: string;
        plateNumber: string;
        spot?: string;
        photoUrl?: string;
        description?: string;
    }): Promise<{
        id: string;
        description: string | null;
        createdAt: Date;
        status: import(".prisma/client").$Enums.ParkingReportStatus;
        complexId: string;
        plateNumber: string;
        resolvedAt: Date | null;
        spot: string | null;
        photoUrl: string | null;
        reporterId: string;
    }>;
    listParkingReports(user: AuthenticatedUser, complexId?: string): Promise<({
        reporter: {
            id: string;
            firstName: string | null;
            lastName: string | null;
        };
    } & {
        id: string;
        description: string | null;
        createdAt: Date;
        status: import(".prisma/client").$Enums.ParkingReportStatus;
        complexId: string;
        plateNumber: string;
        resolvedAt: Date | null;
        spot: string | null;
        photoUrl: string | null;
        reporterId: string;
    })[]>;
    resolvePlate(user: AuthenticatedUser, plateNumber: string): Promise<{
        plate: string;
        candidates: ({
            lot: {
                id: string;
                createdAt: Date;
                updatedAt: Date;
                complexId: string;
                spatialUnitId: string;
                lotNumber: string;
                type: import(".prisma/client").$Enums.LotType;
                surfaceM2: import("@prisma/client/runtime/library").Decimal | null;
                tantiemesGeneral: number;
            };
            resident: {
                user: {
                    email: string;
                    phone: string | null;
                    firstName: string | null;
                    lastName: string | null;
                };
            } & {
                id: string;
                role: import(".prisma/client").$Enums.ResidentRole;
                createdAt: Date;
                userId: string;
                lotId: string;
                startDate: Date;
                endDate: Date | null;
                isPrimary: boolean;
            };
        } & {
            id: string;
            createdAt: Date;
            lotId: string;
            residentId: string;
            plateNumber: string;
            brand: string | null;
            model: string | null;
            color: string | null;
        })[];
    }>;
    updateParkingStatus(user: AuthenticatedUser, id: string, status: ParkingReportStatus): Promise<{
        id: string;
        description: string | null;
        createdAt: Date;
        status: import(".prisma/client").$Enums.ParkingReportStatus;
        complexId: string;
        plateNumber: string;
        resolvedAt: Date | null;
        spot: string | null;
        photoUrl: string | null;
        reporterId: string;
    }>;
    createAnnouncement(user: AuthenticatedUser, dto: {
        complexId: string;
        title: string;
        body: string;
        audience?: AnnouncementAudience;
        expiresAt?: Date;
        pinned?: boolean;
    }): Promise<{
        id: string;
        createdAt: Date;
        complexId: string;
        title: string;
        body: string;
        authorId: string;
        expiresAt: Date | null;
        audience: import(".prisma/client").$Enums.AnnouncementAudience;
        publishedAt: Date;
        pinned: boolean;
    }>;
    listAnnouncements(user: AuthenticatedUser, complexId: string): Promise<({
        author: {
            id: string;
            firstName: string | null;
            lastName: string | null;
        };
    } & {
        id: string;
        createdAt: Date;
        complexId: string;
        title: string;
        body: string;
        authorId: string;
        expiresAt: Date | null;
        audience: import(".prisma/client").$Enums.AnnouncementAudience;
        publishedAt: Date;
        pinned: boolean;
    })[]>;
    deleteAnnouncement(user: AuthenticatedUser, id: string): Promise<{
        ok: boolean;
    }>;
    createThread(user: AuthenticatedUser, dto: {
        complexId: string;
        subject: string;
        participantIds: string[];
    }): Promise<{
        participants: {
            userId: string;
            joinedAt: Date;
            threadId: string;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        subject: string;
    }>;
    postMessage(user: AuthenticatedUser, threadId: string, body: string): Promise<{
        id: string;
        body: string;
        attachments: import("@prisma/client/runtime/library").JsonValue | null;
        sentAt: Date;
        readAt: Date | null;
        threadId: string;
        senderId: string;
    }>;
    listThreads(user: AuthenticatedUser, complexId?: string): Promise<({
        messages: {
            id: string;
            body: string;
            attachments: import("@prisma/client/runtime/library").JsonValue | null;
            sentAt: Date;
            readAt: Date | null;
            threadId: string;
            senderId: string;
        }[];
        participants: ({
            user: {
                id: string;
                email: string;
                firstName: string | null;
                lastName: string | null;
            };
        } & {
            userId: string;
            joinedAt: Date;
            threadId: string;
        })[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        subject: string;
    })[]>;
    listMessages(user: AuthenticatedUser, threadId: string): Promise<({
        sender: {
            id: string;
            firstName: string | null;
            lastName: string | null;
        };
    } & {
        id: string;
        body: string;
        attachments: import("@prisma/client/runtime/library").JsonValue | null;
        sentAt: Date;
        readAt: Date | null;
        threadId: string;
        senderId: string;
    })[]>;
}
