import { DataSource } from 'typeorm';
import { Document } from '../entities/document.entity';
import { DocumentAccessLog } from '../entities/document-access-log.entity';
import { UploadDocumentDto } from '../dto/upload-document.dto';
import { UpdateDocumentDto } from '../dto/update-document.dto';
import { ListDocumentsQueryDto } from '../dto/list-documents.dto';
import { UnlockDocumentDto } from '../dto/unlock-document.dto';
import { ListAccessLogQueryDto } from '../dto/list-access-log.dto';
import { MailsService } from '../../mails/mails.service';
export interface RequestContext {
    ip?: string | null;
    user_agent?: string | null;
}
export declare class DocumentsService {
    private readonly dataSource;
    private readonly mailsService;
    private readonly logger;
    constructor(dataSource: DataSource, mailsService: MailsService);
    private getUserRoles;
    private isAdmin;
    private getUsersForRoles;
    getUsersForRolesPublic(roleIds: number[], userId: number): Promise<{
        id: number;
        name: string;
        email: string;
        role_id: number;
    }[]>;
    private sendNewDocumentNotifications;
    private getUserSnapshot;
    upload(dto: UploadDocumentDto, file: Express.Multer.File, userId: number): Promise<Document>;
    update(id: number, dto: UpdateDocumentDto, userId: number): Promise<Document>;
    remove(id: number, userId: number): Promise<{
        ok: true;
    }>;
    findAll(q: ListDocumentsQueryDto, userId: number): Promise<{
        data: Document[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    findOne(id: number, userId: number): Promise<Document>;
    requestOtp(documentId: number, userId: number, ctx: RequestContext): Promise<{
        ok: true;
        expires_in_minutes: number;
    }>;
    unlock(documentId: number, dto: UnlockDocumentDto, userId: number, ctx: RequestContext): Promise<{
        token: string;
        view_url: string;
        download_url: string | null;
        expires_in_minutes: number;
    }>;
    openForServe(documentId: number, token: string, mode: 'view' | 'download', userId: number, ctx: RequestContext): Promise<{
        absPath: string;
        document: Document;
    }>;
    getAccessLog(documentId: number, q: ListAccessLogQueryDto, userId: number): Promise<{
        data: DocumentAccessLog[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    exportAccessLogCsv(documentId: number, userId: number): Promise<string>;
    getAnalytics(userId: number): Promise<{
        total_docs: number;
        active_docs: number;
        total_opens: number;
        failed_attempts: number;
    }>;
    private canUserAccessDoc;
    private assertNotExpired;
    private log;
    private safeUnlink;
}
