import { DataSource, EntityManager } from 'typeorm';
import { AuditSchedule, ScheduleStatus } from '../entities/audit-schedule.entity';
import { AuditScheduleRow, RowStatus } from '../entities/audit-schedule-row.entity';
import { AuditStatusHistory } from '../entities/audit-status-history.entity';
import { Company } from '../../companies/entities/company.entity';
import { Standard } from '../../standards/entities/standard.entity';
import { User } from '../../user/entities/user.entity';
import { CreateAuditScheduleDto, CreateAuditRowDto } from '../dto/create-audit-schedule.dto';
import { UpdateAuditScheduleDto } from '../dto/update-audit-schedule.dto';
import { UpdateAuditRowDto, CancelAuditRowDto, RescheduleAuditRowDto, BulkCancelDto } from '../dto/audit-row.dto';
import { ListSchedulesQueryDto } from '../dto/list-query.dto';
import { AuditCodeGeneratorService } from './audit-code-generator.service';
import { NotificationsService } from '../../notifications/notifications.service';
import { MailsService } from '../../mails/mails.service';
import { AuditReportStorageService } from './audit-report-storage.service';
export declare class AuditSchedulesService {
    private readonly dataSource;
    private readonly codeGenerator;
    private readonly notifications;
    private readonly mailsService;
    private readonly reportStorage;
    private readonly logger;
    constructor(dataSource: DataSource, codeGenerator: AuditCodeGeneratorService, notifications: NotificationsService, mailsService: MailsService, reportStorage: AuditReportStorageService);
    private isAssignedToRow;
    private userCanViewAll;
    private sendAsUserSafe;
    private userCan;
    private assertUserCan;
    create(dto: CreateAuditScheduleDto, currentUserId: number): Promise<AuditSchedule>;
    findOne(id: number, manager?: EntityManager, currentUserId?: number): Promise<AuditSchedule>;
    findAll(q: ListSchedulesQueryDto, currentUserId?: number): Promise<{
        data: {
            row_count: number;
            id: number;
            schedule_date: string;
            title: string;
            client_group: string;
            coordinator_id: number;
            coordinator: User;
            source_email: string;
            status: ScheduleStatus;
            notes: string;
            created_by_id: number;
            created_by: User;
            created_at: Date;
            updated_at: Date;
            rows: AuditScheduleRow[];
        }[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    update(id: number, dto: UpdateAuditScheduleDto, currentUserId?: number): Promise<AuditSchedule>;
    remove(id: number, currentUserId?: number): Promise<{
        message: string;
        id: number;
    }>;
    addRow(scheduleId: number, rowDto: CreateAuditRowDto, currentUserId: number): Promise<AuditScheduleRow>;
    updateRow(scheduleId: number, rowId: number, dto: UpdateAuditRowDto, currentUserId: number): Promise<AuditScheduleRow>;
    removeRow(scheduleId: number, rowId: number, currentUserId?: number): Promise<{
        message: string;
        id: number;
    }>;
    cancelRow(rowId: number, dto: CancelAuditRowDto, currentUserId: number): Promise<AuditScheduleRow>;
    rescheduleRow(rowId: number, dto: RescheduleAuditRowDto, currentUserId: number): Promise<AuditScheduleRow>;
    bulkCancel(scheduleId: number, dto: BulkCancelDto, currentUserId: number): Promise<{
        message: string;
        cancelled_count: number;
    }>;
    getCompanyAuditHistory(companyId: number, limit?: number): Promise<AuditScheduleRow[]>;
    getRowAuditTrail(rowId: number): Promise<AuditStatusHistory[]>;
    getAnalytics(): Promise<{
        total_audits: number;
        completed: number;
        pending: number;
        cancelled: number;
        this_week: number;
        completion_rate: number;
    }>;
    private countThisWeek;
    findByDate(date: string): Promise<AuditSchedule[]>;
    private findOneRow;
    private defaultTitle;
    private buildRowEntity;
    private resolveRecipientsForRow;
    private buildWhatsappMessage;
    private notifySchedulePublished;
    private notifyAuditRowCancelled;
    private notifyAuditRowRescheduled;
    private notifyAuditScheduleBulkCancelled;
    myRows(currentUserId: number, q: any): Promise<{
        data: {
            reassigned_from_you: boolean;
            id: number;
            schedule_id: number;
            schedule: AuditSchedule;
            row_no: number;
            audit_code: string;
            audit_type: import("../entities/audit-schedule-row.entity").AuditType;
            audit_stage: string;
            audit_mode: import("../entities/audit-schedule-row.entity").AuditMode;
            accreditation: string;
            company_id: number;
            company: Company;
            lead_auditor_id: number;
            lead_auditor: User;
            co_auditors: User[];
            standards: Standard[];
            audit_time: string;
            audit_time_label: string;
            previous_lead_auditor_id: number | null;
            previous_co_auditor_ids: number[] | null;
            status: RowStatus;
            audit_request_id: number | null;
            audit_request: import("../../audit-requests/entities/audit-request.entity").AuditRequest | null;
            cancelled_at: Date | null;
            cancelled_by_id: number | null;
            cancelled_by: User | null;
            cancellation_reason: import("../entities/audit-schedule-row.entity").CancellationReason | null;
            cancellation_notes: string | null;
            original_audit_date: string;
            reschedule_count: number;
            reschedule_reason: string;
            last_rescheduled_at: Date;
            notes: string;
            stg1_audit_report: string | null;
            stg2_audit_report: string | null;
            attendance_doc: string | null;
            nc_form_doc: string | null;
            support_docs: string | null;
            created_at: Date;
            updated_at: Date;
        }[];
        meta: {
            total: number;
            page: any;
            limit: any;
            totalPages: number;
        };
    }>;
    myScheduleMaster(currentUserId: number, q: any): Promise<{
        data: AuditScheduleRow[];
        counts: {
            initial: number;
            surveillance: number;
            recertification: number;
            total: number;
        };
        meta: {
            total: number;
            page: any;
            limit: any;
            totalPages: number;
        };
    }>;
    myRowsAnalytics(currentUserId: number): Promise<{
        today: number;
        this_week: number;
        in_progress: number;
        completed_this_month: number;
    }>;
    workspace(rowId: number, currentUserId: number): Promise<{
        row: AuditScheduleRow;
        audit_request: any;
        history: AuditStatusHistory[];
    }>;
    markComplete(rowId: number, currentUserId: number): Promise<AuditScheduleRow>;
    private static readonly DOC_COLUMN;
    uploadAuditReport(rowId: number, docType: string, file: Express.Multer.File, currentUserId: number): Promise<{
        ok: true;
        row_id: number;
        doc_type: string;
        document_path: string;
        filename: string;
        size: number;
    }>;
    openAuditReport(rowId: number, docType: string, currentUserId: number): Promise<{
        stream: import('stream').Readable;
        size: number;
        mimeType: string;
        filename: string;
    }>;
    private resolveMyAuditsDateRange;
    private toISODate;
    private parseISODateLocal;
    private userIsMyAuditsViewAll;
    private fullName;
    private buildPublishedHtml;
    private buildCancelledHtml;
    private buildRescheduledHtml;
    private buildBulkCancelledHtml;
    private qrsShell;
    private detailBlock;
}
