import { ConfigService } from '@nestjs/config';
import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { RagflowSourceType, SyncItemStatus, SyncStatus } from '@prisma/client';
import { SharePointSyncService } from './sharepoint-sync.service';
import { RagflowService } from './ragflow.service';
import { ProseMirrorTextService } from './prosemirror-text.service';
export interface SyncResult {
    taskId: string;
    totalItems: number;
    processedItems: number;
    processingItems: number;
    failedItems: number;
    skippedItems: number;
    processedTokens: number;
    processedChunks: number;
    status: SyncStatus;
    error?: string;
    triggerSource?: string | null;
}
export interface SyncTaskListItem {
    id: string;
    taskType: string;
    triggerSource?: string | null;
    status: SyncStatus;
    totalItems: number | null;
    processedItems: number;
    processingItems: number;
    failedItems: number;
    skippedItems: number;
    processedTokens: number;
    processedChunks: number;
    error?: string | null;
    startedAt?: Date | null;
    completedAt?: Date | null;
    createdAt: Date;
}
export interface SyncTaskListResult {
    items: SyncTaskListItem[];
    total: number;
}
export interface SyncTaskSkippedItem {
    id: string;
    taskId: string;
    sourceType: RagflowSourceType;
    sourceId: string;
    filename: string;
    fileExtension: string | null;
    mimeType: string | null;
    reason: string;
    createdAt: Date;
}
export interface SyncTaskSkippedResult {
    items: SyncTaskSkippedItem[];
    total: number;
}
export interface SyncTaskProcessedItem {
    id: string;
    taskId: string;
    sourceType: RagflowSourceType;
    sourceId: string;
    filename: string;
    fileExtension: string | null;
    mimeType: string | null;
    ragflowDocumentId: string | null;
    tokenCount: number | null;
    chunkCount: number | null;
    sourceSizeBytes: number | null;
    status: SyncItemStatus;
    createdAt: Date;
}
export interface SyncTaskProcessedResult {
    items: SyncTaskProcessedItem[];
    total: number;
}
export interface SyncTaskFailedItem {
    id: string;
    taskId: string;
    sourceType: RagflowSourceType;
    sourceId: string;
    filename: string;
    fileExtension: string | null;
    mimeType: string | null;
    error: string;
    createdAt: Date;
}
export interface SyncTaskFailedResult {
    items: SyncTaskFailedItem[];
    total: number;
}
export declare class RagflowSyncService {
    private readonly prisma;
    private readonly sharePointSyncService;
    private readonly ragflowService;
    private readonly prosemirrorTextService;
    private readonly configService;
    private readonly logger;
    constructor(prisma: PrismaService, sharePointSyncService: SharePointSyncService, ragflowService: RagflowService, prosemirrorTextService: ProseMirrorTextService, configService: ConfigService);
    syncAll(triggerSource?: string): Promise<SyncResult>;
    startFullSync(triggerSource?: string): Promise<string>;
    startDeltaSync(): Promise<{
        taskId: string;
        fallbackToFull: boolean;
        reason?: string;
    }>;
    terminateSyncTask(taskId: string): Promise<SyncResult>;
    private executeSync;
    private executeDeltaSync;
    getTaskStatus(taskId: string): Promise<SyncResult | null>;
    listTasks(limit: number, offset: number): Promise<SyncTaskListResult>;
    listSkippedItems(taskId: string, limit: number, offset: number): Promise<SyncTaskSkippedResult>;
    listProcessedItems(taskId: string, limit: number, offset: number): Promise<SyncTaskProcessedResult>;
    listFailedItems(taskId: string, limit: number, offset: number): Promise<SyncTaskFailedResult>;
    listProcessingItems(taskId: string, limit: number, offset: number): Promise<SyncTaskProcessedResult>;
    private refreshProcessingItems;
    syncSingleArticle(articleId: string): Promise<SyncResult>;
    private syncSharePointDocument;
    private syncKnowledgeArticle;
    private processRemovedSharePointItems;
    private upsertRagflowDocument;
    private fetchDocumentState;
    private resolveRagflowDocumentState;
    private cleanupStaleMappings;
    private recordSkippedItem;
    private recordProcessedItem;
    private recordFailedItem;
    private normalizeDisplayName;
    private hasSharePointMetadataChanged;
    private isEmbeddingCredentialError;
    private getUnsupportedSharePointReason;
    private getMultimodalSkipReason;
    private isLocalOcrOnlyEnabled;
    private isMultimodalFile;
    private isImageOrVideoFile;
    private isImageFile;
    private isVideoFile;
    private isAudioFile;
    private formatSyncError;
    private formatFileSizeError;
    private parseFileSizeLimitFromMessage;
    private formatFileTooLargeReason;
    private getMaxSharePointFileSizeBytes;
    private getRagflowMaxContentLengthBytes;
    private getSyncTimeoutMs;
    private getSyncProgressTimeoutMs;
    private getRemoteHealthCheckIntervalMs;
    private shouldCheckRemoteHealth;
    private getActiveSyncTaskId;
    private normalizeSyncTaskStatus;
    private assertNotTimedOut;
    private assertTaskActive;
    private assertNotStalled;
    private updateProgressHeartbeat;
    private mapExtensionByContentType;
    private isSupportedRagflowFile;
    private writeTempFile;
    private hashContent;
    private safeRemove;
}
