import { AccessBadgeType, AccessDirection, Prisma } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
import { StubPlateRecognitionProvider } from './providers/plate-recognition.provider';
interface IssueBadgeInput {
    userId: string;
    complexId: string;
    type?: AccessBadgeType;
    label?: string;
    validUntil?: Date;
    plateNumber?: string;
}
interface VerifyAccessInput {
    complexId: string;
    code?: string;
    plateImageBase64?: string;
    direction?: AccessDirection;
    gate?: string;
}
export declare class AccessService {
    private readonly prisma;
    private readonly ocr;
    private readonly logger;
    constructor(prisma: PrismaService, ocr: StubPlateRecognitionProvider);
    issueBadge(user: AuthenticatedUser, dto: IssueBadgeInput): Promise<{
        badge: {
            id: string;
            code: string;
            label: string | null;
            createdAt: Date;
            userId: string;
            complexId: string;
            type: import(".prisma/client").$Enums.AccessBadgeType;
            validFrom: Date;
            validUntil: Date | null;
            revoked: boolean;
        };
        qrDataUrl: string | undefined;
    }>;
    listBadges(user: AuthenticatedUser, complexId?: string): Promise<({
        user: {
            id: string;
            email: string;
            firstName: string | null;
        };
    } & {
        id: string;
        code: string;
        label: string | null;
        createdAt: Date;
        userId: string;
        complexId: string;
        type: import(".prisma/client").$Enums.AccessBadgeType;
        validFrom: Date;
        validUntil: Date | null;
        revoked: boolean;
    })[]>;
    revokeBadge(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        code: string;
        label: string | null;
        createdAt: Date;
        userId: string;
        complexId: string;
        type: import(".prisma/client").$Enums.AccessBadgeType;
        validFrom: Date;
        validUntil: Date | null;
        revoked: boolean;
    }>;
    verify(dto: VerifyAccessInput): Promise<{
        granted: boolean;
        logId: string;
        userId: string | null;
        type: import(".prisma/client").$Enums.AccessBadgeType;
    }>;
    listLogs(user: AuthenticatedUser, complexId: string, limit?: number): Promise<({
        user: {
            id: string;
            email: string;
            firstName: string | null;
        } | null;
    } & {
        id: string;
        result: import(".prisma/client").$Enums.AccessResult;
        createdAt: Date;
        userId: string | null;
        complexId: string;
        type: import(".prisma/client").$Enums.AccessBadgeType;
        badgeCode: string | null;
        direction: import(".prisma/client").$Enums.AccessDirection;
        gate: string | null;
        confidence: number | null;
        rawPayload: Prisma.JsonValue | null;
    })[]>;
    private assertComplexAccess;
    private listAccessibleComplexIds;
}
export {};
