import { PrismaService } from "../../../core/database/prisma/prisma.service";
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';
interface ActorContext {
    userId: string;
    organizationId?: string | null;
    permissions: string[];
}
interface MulterFileLike {
    path: string;
    originalname: string;
    mimetype: string;
    size: number;
}
export declare class AgendaItemAttachmentService {
    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(itemId: string, file: MulterFileLike, 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;
            agendaItemId: string;
            uploadedById: string;
            storagePath: string;
            uploadedAt: Date;
        };
        taskUpdated: any;
    }>;
    listByItem(itemId: string): 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;
            agendaItemId: string;
            uploadedById: string;
            storagePath: string;
            uploadedAt: Date;
        })[];
    }>;
    deleteAttachment(itemId: string, attachmentId: string, actor: ActorContext & {
        isAdminOrManager: boolean;
    }, req?: Request): Promise<void>;
    findForDownload(attachmentId: string): Promise<{
        attachment: {
            agendaItem: {
                section: {
                    meetingId: string;
                };
            } & {
                title: string;
                code: string | null;
                id: string;
                createdAt: Date;
                updatedAt: Date;
                deletedAt: Date | null;
                description: string | null;
                organizationId: string | null;
                order: number;
                createdById: string;
                sectionId: string;
                timeMinutes: number | null;
                presenterUserId: string | null;
                categoryTag: import("@prisma/client").$Enums.AgendaCategoryTag | null;
            };
        } & {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string | null;
            createdById: string;
            size: bigint;
            filename: string;
            mimeType: string;
            agendaItemId: string;
            uploadedById: string;
            storagePath: string;
            uploadedAt: Date;
        };
        meetingId: string;
    }>;
}
export {};
