import { AnnouncementAudience, ParkingReportStatus } from '@prisma/client';
import { CommunityService } from './community.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
declare class CreateVisitorPassDto {
    complexId: string;
    visitorName: string;
    visitorPhone?: string;
    purpose?: string;
    validFrom?: string;
    validUntil: string;
}
declare class ScanVisitorPassDto {
    qrToken: string;
}
declare class CreateParkingReportDto {
    complexId: string;
    plateNumber: string;
    spot?: string;
    photoUrl?: string;
    description?: string;
}
declare class UpdateParkingStatusDto {
    status: ParkingReportStatus;
}
declare class CreateAnnouncementDto {
    complexId: string;
    title: string;
    body: string;
    audience?: AnnouncementAudience;
    expiresAt?: string;
    pinned?: boolean;
}
declare class CreateThreadDto {
    complexId: string;
    subject: string;
    participantIds: string[];
}
declare class PostMessageDto {
    body: string;
}
export declare class CommunityController {
    private readonly service;
    constructor(service: CommunityService);
    createPass(u: AuthenticatedUser, dto: CreateVisitorPassDto): 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;
    }>;
    listPasses(u: 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;
    }[]>;
    revokePass(u: 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;
    }>;
    scan(dto: ScanVisitorPassDto & {
        apiKey?: string;
    }): Promise<{
        granted: boolean;
        reason: string;
        pass?: undefined;
    } | {
        granted: boolean;
        pass: {
            id: string;
            visitorName: string;
            purpose: string | null;
            residentId: string;
        };
        reason?: undefined;
    }> | {
        granted: boolean;
        reason: string;
    };
    report(u: AuthenticatedUser, dto: CreateParkingReportDto): 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;
    }>;
    listReports(u: 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(u: AuthenticatedUser, plate: 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;
        })[];
    }>;
    updateStatus(u: AuthenticatedUser, id: string, dto: UpdateParkingStatusDto): 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;
    }>;
    createAnn(u: AuthenticatedUser, dto: CreateAnnouncementDto): 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;
    }>;
    listAnn(u: 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;
    })[]>;
    deleteAnn(u: AuthenticatedUser, id: string): Promise<{
        ok: boolean;
    }>;
    createThread(u: AuthenticatedUser, dto: CreateThreadDto): Promise<{
        participants: {
            userId: string;
            joinedAt: Date;
            threadId: string;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        subject: string;
    }>;
    listThreads(u: 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(u: AuthenticatedUser, id: 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;
    })[]>;
    post(u: AuthenticatedUser, id: string, dto: PostMessageDto): Promise<{
        id: string;
        body: string;
        attachments: import("@prisma/client/runtime/library").JsonValue | null;
        sentAt: Date;
        readAt: Date | null;
        threadId: string;
        senderId: string;
    }>;
}
export {};
