/**
 * Semantic Memory 생성 통계 수집 서비스
 *
 * PRD 8.2: Semantic Memory 생성 통계
 * - 생성된 Semantic Memory 수
 * - 업데이트된 Semantic Memory 수
 * - 중복 제거된 항목 수
 */
/**
 * Semantic Memory 생성 통계 수집 서비스
 */
export class SemanticMemoryStatisticsService {
    statistics;
    confidenceValues = []; // Confidence 히스토리 (최근 1000개)
    processingTimes = []; // 처리 시간 히스토리 (최근 1000개)
    constructor() {
        this.statistics = this.initializeStatistics();
    }
    /**
     * 통계 초기화
     */
    initializeStatistics() {
        return {
            totalProcessed: 0,
            totalCreated: 0,
            totalUpdated: 0,
            totalSkipped: 0,
            totalDuplicates: 0,
            totalConfidence: 0,
            averageConfidence: 0,
            minConfidence: Infinity,
            maxConfidence: 0,
            totalProcessingTime: 0,
            averageProcessingTime: 0,
            totalErrors: 0,
            errorRate: 0.0,
            firstRecorded: Date.now(),
            lastRecorded: Date.now()
        };
    }
    /**
     * Semantic Memory 생성/업데이트 결과 기록
     *
     * @param created 생성된 Semantic Memory 수
     * @param updated 업데이트된 Semantic Memory 수
     * @param skipped 건너뛴 Semantic Memory 수
     * @param duplicates 중복 제거된 항목 수
     * @param confidences Confidence 값 배열
     * @param processingTime 처리 시간 (밀리초)
     * @param error 에러 발생 여부
     */
    recordUpdate(created, updated, skipped, duplicates, confidences, processingTime, error = false) {
        this.statistics.totalProcessed += (created + updated + skipped);
        this.statistics.totalCreated += created;
        this.statistics.totalUpdated += updated;
        this.statistics.totalSkipped += skipped;
        this.statistics.totalDuplicates += duplicates;
        this.statistics.lastRecorded = Date.now();
        // Confidence 통계
        for (const confidence of confidences) {
            this.confidenceValues.push(confidence);
            // 최근 1000개만 유지 (메모리 효율성)
            if (this.confidenceValues.length > 1000) {
                this.confidenceValues.shift();
            }
            this.statistics.totalConfidence += confidence;
            this.statistics.minConfidence = Math.min(this.statistics.minConfidence, confidence);
            this.statistics.maxConfidence = Math.max(this.statistics.maxConfidence, confidence);
        }
        // 평균 Confidence 계산 (최근 1000개 기준)
        if (this.confidenceValues.length > 0) {
            const sum = this.confidenceValues.reduce((acc, conf) => acc + conf, 0);
            this.statistics.averageConfidence = sum / this.confidenceValues.length;
        }
        // 처리 시간 통계
        this.processingTimes.push(processingTime);
        // 최근 1000개만 유지 (메모리 효율성)
        if (this.processingTimes.length > 1000) {
            this.processingTimes.shift();
        }
        this.statistics.totalProcessingTime += processingTime;
        // 평균 처리 시간 계산 (최근 1000개 기준)
        if (this.processingTimes.length > 0) {
            const sum = this.processingTimes.reduce((acc, time) => acc + time, 0);
            this.statistics.averageProcessingTime = sum / this.processingTimes.length;
        }
        // 에러 통계
        if (error) {
            this.statistics.totalErrors++;
        }
        // 에러율 계산
        this.statistics.errorRate = this.statistics.totalProcessed > 0
            ? this.statistics.totalErrors / this.statistics.totalProcessed
            : 0.0;
    }
    /**
     * 통계 조회
     *
     * @returns Semantic Memory 생성 통계
     */
    getStatistics() {
        return { ...this.statistics };
    }
    /**
     * 통계 리셋
     */
    reset() {
        this.statistics = this.initializeStatistics();
        this.confidenceValues = [];
        this.processingTimes = [];
    }
}
//# sourceMappingURL=semantic-memory-statistics.js.map