import { DataSource, Repository } from 'typeorm';
import { AuditReport } from '../entities/audit-report.entity';
import { AuditReportClause } from '../entities/audit-report-clause.entity';
import { AuditReportVersion } from '../entities/audit-report-version.entity';
import { MailsService } from '../../mails/mails.service';
import { AuditReportStorageService } from '../../audit-schedules/services/audit-report-storage.service';
import { ReportBuilderService } from './report-builder.service';
import { ReportRenderService } from './report-render.service';
import { ReportPdfService } from './report-pdf.service';
export declare class ReportWorkflowService {
    private readonly reports;
    private readonly clauses;
    private readonly versions;
    private readonly db;
    private readonly builder;
    private readonly renderer;
    private readonly mails;
    private readonly storage;
    private readonly pdf;
    private readonly logger;
    constructor(reports: Repository<AuditReport>, clauses: Repository<AuditReportClause>, versions: Repository<AuditReportVersion>, db: DataSource, builder: ReportBuilderService, renderer: ReportRenderService, mails: MailsService, storage: AuditReportStorageService, pdf: ReportPdfService);
    submit(id: number, userId: number): Promise<{
        ok: boolean;
        status: "submitted";
    }>;
    approve(id: number, userId: number): Promise<{
        ok: boolean;
        status: "submitted";
        version: number;
        pdf_path: string;
        audit_row_column: string;
    }>;
    private notifyReportSubmitted;
    private notifyReportApproved;
    private notifyReportReturned;
    returnToAuditor(id: number, reason: string, userId: number): Promise<{
        ok: boolean;
        status: "returned";
    }>;
    private approvalSecret;
    signApprovalToken(reportId: number, userId: number, ttlHours?: number): string;
    verifyApprovalToken(token: string): {
        r: number;
        u: number;
    };
    approveByToken(token: string): Promise<{
        ok: boolean;
        status: "submitted";
        version: number;
        pdf_path: string;
        audit_row_column: string;
    }>;
    reopen(id: number, reason: string, userId: number): Promise<{
        ok: boolean;
        status: "returned";
        version: number;
    }>;
    lock(id: number, userId: number): Promise<{
        ok: boolean;
        status: "locked";
    }>;
    openFinalPdf(id: number): Promise<{
        stream: import("stream").Readable;
        size: number;
        mimeType: string;
        filename: string;
    }>;
    private userEmails;
    private approverEmails;
    private mailBody;
    private send;
    private notifyApprovers;
    private notifyAuthor;
}
