import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { ImportBatchType, Prisma } from '@prisma/client';
import type { FieldMetadata, ParsedRow, ValidationIssue } from './importer.interface';
export interface ErrorPreviewEntry {
    rowNo: number;
    errorDetail: ValidationIssue[];
}
export declare class ImportBatchService {
    private readonly prisma;
    private readonly logger;
    constructor(prisma: PrismaService);
    computeFileHash(buffer: Buffer): string;
    computeSchemaHash(metadata: FieldMetadata[]): string;
    parseExcel(buffer: Buffer): {
        headers: string[];
        rows: Record<string, unknown>[];
    };
    generateTemplate(metadata: FieldMetadata[], locale: 'zh' | 'en', type: ImportBatchType): Buffer;
    createBatch(type: ImportBatchType, fileName: string, fileHash: string, templateSchemaHash: string, parsedRows: ParsedRow<unknown>[], extraIssues: ValidationIssue[], userId: string, organizationId: string, clientIp?: string, userAgent?: string): Promise<{
        batch: {
            type: import("@prisma/client").$Enums.ImportBatchType;
            id: string;
            createdAt: Date;
            userAgent: string | null;
            status: import("@prisma/client").$Enums.ImportBatchStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            clientIp: string | null;
            startedAt: Date | null;
            completedAt: Date | null;
            fileName: string;
            totalRows: number;
            fileHash: string;
            successRows: number;
            confirmedAt: Date | null;
            templateSchemaHash: string;
            errorRows: number;
            warningRows: number;
            confirmedById: string | null;
            errorSummary: Prisma.JsonValue | null;
        };
        errorPreview: ErrorPreviewEntry[];
    }>;
    getErrorPreview(batchId: string, limit?: number): Promise<ErrorPreviewEntry[]>;
    findBatch(batchId: string, userId: string, organizationId: string, isAdmin: boolean): Promise<{
        entries: {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.ImportEntryStatus;
            deletedAt: Date | null;
            payload: Prisma.JsonValue;
            batchId: string;
            rowNo: number;
            entityIds: string[];
            payloadHash: string;
            errorDetail: Prisma.JsonValue | null;
        }[];
    } & {
        type: import("@prisma/client").$Enums.ImportBatchType;
        id: string;
        createdAt: Date;
        userAgent: string | null;
        status: import("@prisma/client").$Enums.ImportBatchStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        clientIp: string | null;
        startedAt: Date | null;
        completedAt: Date | null;
        fileName: string;
        totalRows: number;
        fileHash: string;
        successRows: number;
        confirmedAt: Date | null;
        templateSchemaHash: string;
        errorRows: number;
        warningRows: number;
        confirmedById: string | null;
        errorSummary: Prisma.JsonValue | null;
    }>;
    lockForConfirm(batchId: string, userId: string, organizationId: string): Promise<({
        entries: {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.ImportEntryStatus;
            deletedAt: Date | null;
            payload: Prisma.JsonValue;
            batchId: string;
            rowNo: number;
            entityIds: string[];
            payloadHash: string;
            errorDetail: Prisma.JsonValue | null;
        }[];
    } & {
        type: import("@prisma/client").$Enums.ImportBatchType;
        id: string;
        createdAt: Date;
        userAgent: string | null;
        status: import("@prisma/client").$Enums.ImportBatchStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        clientIp: string | null;
        startedAt: Date | null;
        completedAt: Date | null;
        fileName: string;
        totalRows: number;
        fileHash: string;
        successRows: number;
        confirmedAt: Date | null;
        templateSchemaHash: string;
        errorRows: number;
        warningRows: number;
        confirmedById: string | null;
        errorSummary: Prisma.JsonValue | null;
    }) | null>;
    markCompleted(batchId: string, confirmedById: string, entityIdsMap: Map<number, string[]>): Promise<{
        type: import("@prisma/client").$Enums.ImportBatchType;
        id: string;
        createdAt: Date;
        userAgent: string | null;
        status: import("@prisma/client").$Enums.ImportBatchStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        clientIp: string | null;
        startedAt: Date | null;
        completedAt: Date | null;
        fileName: string;
        totalRows: number;
        fileHash: string;
        successRows: number;
        confirmedAt: Date | null;
        templateSchemaHash: string;
        errorRows: number;
        warningRows: number;
        confirmedById: string | null;
        errorSummary: Prisma.JsonValue | null;
    }>;
    markFailed(batchId: string, errorCode: string, detail?: any): Promise<{
        type: import("@prisma/client").$Enums.ImportBatchType;
        id: string;
        createdAt: Date;
        userAgent: string | null;
        status: import("@prisma/client").$Enums.ImportBatchStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        clientIp: string | null;
        startedAt: Date | null;
        completedAt: Date | null;
        fileName: string;
        totalRows: number;
        fileHash: string;
        successRows: number;
        confirmedAt: Date | null;
        templateSchemaHash: string;
        errorRows: number;
        warningRows: number;
        confirmedById: string | null;
        errorSummary: Prisma.JsonValue | null;
    }>;
    findInFlightSameFile(userId: string, organizationId: string, fileHash: string): Promise<{
        type: import("@prisma/client").$Enums.ImportBatchType;
        id: string;
        createdAt: Date;
        userAgent: string | null;
        status: import("@prisma/client").$Enums.ImportBatchStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        clientIp: string | null;
        startedAt: Date | null;
        completedAt: Date | null;
        fileName: string;
        totalRows: number;
        fileHash: string;
        successRows: number;
        confirmedAt: Date | null;
        templateSchemaHash: string;
        errorRows: number;
        warningRows: number;
        confirmedById: string | null;
        errorSummary: Prisma.JsonValue | null;
    } | null>;
    ensureNoOtherInFlight(userId: string, organizationId: string, excludeBatchId?: string): Promise<void>;
    listBatches(type: ImportBatchType | undefined, userId: string, organizationId: string, isAdmin: boolean, scope: 'mine' | 'all', page: number, limit: number): Promise<{
        items: {
            type: import("@prisma/client").$Enums.ImportBatchType;
            id: string;
            createdAt: Date;
            userAgent: string | null;
            status: import("@prisma/client").$Enums.ImportBatchStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            clientIp: string | null;
            startedAt: Date | null;
            completedAt: Date | null;
            fileName: string;
            totalRows: number;
            fileHash: string;
            successRows: number;
            confirmedAt: Date | null;
            templateSchemaHash: string;
            errorRows: number;
            warningRows: number;
            confirmedById: string | null;
            errorSummary: Prisma.JsonValue | null;
        }[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    generateErrorReport(batchId: string, userId: string, organizationId: string, isAdmin: boolean): Promise<Buffer>;
}
