import { DataSource } from 'typeorm';
import { Readable } from 'stream';
import { NcFileStorageService } from './nc-file-storage.service';
import { ClosurePdfService } from './closure-pdf.service';
import { MailsService } from '../../mails/mails.service';
export interface ClosureRowDto {
    entry_id: number;
    evidence_received: string;
    submitted_docs: string;
    result_accepted: boolean;
    remarks: string;
    status?: 'open' | 'closed';
}
export interface SaveClosureDto {
    closed_entry_ids: number[];
    rows: ClosureRowDto[];
    verification_by_auditor: string;
    auditor_name: string;
    closure_date: string;
    send_to_client: boolean;
    closure_to?: string;
    closure_cc?: string;
    closure_bcc?: string;
    finalize: boolean;
}
export interface ClosureResponse {
    nc_id: number;
    source: 'QRS' | 'TQS' | 'NEW';
    is_finalized: boolean;
    finalized_at: string | null;
    signed_copy_path: string | null;
    signature_path: string | null;
    verification_by_auditor: string;
    auditor_name: string;
    closure_date: string | null;
    send_to_client: boolean;
    rows: Array<{
        id: number;
        entry_id: number;
        evidence_received: string;
        submitted_docs: string;
        result_accepted: boolean;
        remarks: string;
    }>;
}
export declare class NcClosureService {
    private readonly qrsDs;
    private readonly tqsDs;
    private readonly schemeDb;
    private readonly fileStorage;
    private readonly pdfService;
    private readonly mailsService;
    private readonly logger;
    constructor(qrsDs: DataSource, tqsDs: DataSource, schemeDb: DataSource, fileStorage: NcFileStorageService, pdfService: ClosurePdfService, mailsService: MailsService);
    private dsFor;
    private userCanViewAll;
    private userHasNcPermission;
    private assertCanEdit;
    private resolveSourceUserId;
    getClosure(source: 'QRS' | 'TQS' | 'NEW', ncId: number): Promise<ClosureResponse>;
    saveClosure(source: 'QRS' | 'TQS' | 'NEW', ncId: number, dto: SaveClosureDto, files: {
        signedCopy?: Express.Multer.File;
        signature?: Express.Multer.File;
    }, currentUserId: number): Promise<{
        ok: true;
        is_finalized: boolean;
        rows_saved: number;
        entries_closed: number;
        merged_pdf_sha256?: string;
        merged_pdf_pages?: number;
        merged_pdf_content_hash?: string;
    }>;
    private buildPdfInput;
    private resolveStandardNames;
    deleteDraftClosure(source: 'QRS' | 'TQS' | 'NEW', ncId: number, currentUserId: number): Promise<{
        ok: true;
        deleted_rows: number;
    }>;
    openClosureFile(source: 'QRS' | 'TQS' | 'NEW', ncId: number, kind: 'signed_copy' | 'signature'): Promise<{
        stream: Readable;
        size: number;
        mimeType: string;
        filename: string;
    }>;
    private validateSaveDto;
    private firstNonEmpty;
    private deleteIfReplaced;
    private toIsoDate;
    private buildClosureEmailHtml;
    private sendClosureEmail;
    resendClosureEmail(source: 'QRS' | 'TQS' | 'NEW', ncId: number, dto: {
        closure_to?: string;
        closure_cc?: string;
        closure_bcc?: string;
    }, currentUserId: number): Promise<{
        ok: true;
        sent_to: string;
    }>;
    sendEvidenceEmail(source: 'QRS' | 'TQS' | 'NEW', ncId: number, dto: {
        evidence_to?: string;
        evidence_cc?: string;
        evidence_bcc?: string;
    }, currentUserId: number): Promise<{
        ok: true;
        sent_to: string;
        files_attached: number;
    }>;
    private buildEvidenceEmailHtml;
    listFinalizedClosures(filters: {
        source?: 'QRS' | 'TQS' | 'NEW' | 'All';
        nc_type?: string;
        date_from?: string;
        date_to?: string;
        search?: string;
    }): Promise<any[]>;
    private shapeClosureRow;
    private userIsSuperAdmin;
    deleteFinalizedClosure(source: 'QRS' | 'TQS' | 'NEW', ncId: number, currentUserId: number): Promise<{
        ok: true;
        reopened: boolean;
        deleted_rows: number;
    }>;
}
