import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { MeetingAttachmentCategory } from '@prisma/client';
import type { Request } from 'express';
import { LocalDiskStorage } from './storage/local-disk.storage';
import { AttachmentValidator } from './attachment-validator.service';
import { MeetingAttendanceAuditLogWriter } from './audit-log-writer.service';
import { QueryMeetingAttachmentsDto } from '../dto/agenda.dto';
interface ActorContext {
    userId: string;
    organizationId?: string | null;
    permissions: string[];
}
interface MulterFileLike {
    path: string;
    originalname: string;
    mimetype: string;
    size: number;
}
export declare class MeetingAttachmentService {
    private readonly prisma;
    private readonly storage;
    private readonly validator;
    private readonly auditLogWriter;
    private readonly logger;
    constructor(prisma: PrismaService, storage: LocalDiskStorage, validator: AttachmentValidator, auditLogWriter: MeetingAttendanceAuditLogWriter);
    upload(meetingId: string, file: MulterFileLike, category: MeetingAttachmentCategory | undefined, actor: ActorContext, req?: Request): Promise<{
        attachment: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string | null;
            createdById: string;
            size: bigint;
            filename: string;
            mimeType: string;
            category: import("@prisma/client").$Enums.MeetingAttachmentCategory | null;
            meetingId: string;
            uploadedById: string;
            storagePath: string;
            uploadedAt: Date;
        };
    }>;
    listByMeeting(meetingId: string, query: QueryMeetingAttachmentsDto): Promise<{
        items: ({
            uploadedBy: {
                displayName: string;
                id: string;
                email: string;
            };
        } & {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string | null;
            createdById: string;
            size: bigint;
            filename: string;
            mimeType: string;
            category: import("@prisma/client").$Enums.MeetingAttachmentCategory | null;
            meetingId: string;
            uploadedById: string;
            storagePath: string;
            uploadedAt: Date;
        })[];
    }>;
    deleteAttachment(meetingId: string, attachmentId: string, actor: ActorContext & {
        isAdminOrManager: boolean;
    }, req?: Request): Promise<void>;
    findForDownload(attachmentId: string): Promise<{
        attachment: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string | null;
            createdById: string;
            size: bigint;
            filename: string;
            mimeType: string;
            category: import("@prisma/client").$Enums.MeetingAttachmentCategory | null;
            meetingId: string;
            uploadedById: string;
            storagePath: string;
            uploadedAt: Date;
        };
        meetingId: string;
    }>;
}
export {};
