File size: 3,025 Bytes
3998131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/**
 * Document Cache Utility
 * Stores analyzed documents in browser localStorage for dashboard statistics
 */

export interface AnalyzedDocument {
  id: string
  filename: string
  analyzedAt: string
  type: "bias-detection" | "letter-generation"
  result: {
    totalSentences?: number
    biasedCount?: number
    neutralCount?: number
    success: boolean
  }
  sessionId?: string
}

const CACHE_KEY = "setu_analyzed_documents"
const MAX_CACHE_SIZE = 100 // Maximum number of documents to store

/**
 * Get all analyzed documents from cache
 */
export function getCachedDocuments(): AnalyzedDocument[] {
  try {
    const cached = localStorage.getItem(CACHE_KEY)
    if (!cached) return []
    return JSON.parse(cached)
  } catch (error) {
    console.error("Error reading document cache:", error)
    return []
  }
}

/**
 * Add a new analyzed document to cache
 */
export function addDocumentToCache(document: Omit<AnalyzedDocument, "id" | "analyzedAt">): void {
  try {
    const documents = getCachedDocuments()

    const newDocument: AnalyzedDocument = {
      ...document,
      id: generateDocumentId(),
      analyzedAt: new Date().toISOString(),
    }

    // Add to beginning of array (most recent first)
    documents.unshift(newDocument)

    // Limit cache size
    if (documents.length > MAX_CACHE_SIZE) {
      documents.splice(MAX_CACHE_SIZE)
    }

    localStorage.setItem(CACHE_KEY, JSON.stringify(documents))
  } catch (error) {
    console.error("Error adding document to cache:", error)
  }
}

/**
 * Get statistics about cached documents
 */
export function getDocumentStats() {
  const documents = getCachedDocuments()

  const biasDocuments = documents.filter(d => d.type === "bias-detection")
  const totalAnalyzed = biasDocuments.length

  let totalInclusive = 0
  let totalFlagged = 0

  biasDocuments.forEach(doc => {
    if (doc.result.biasedCount === 0) {
      totalInclusive++
    } else if (doc.result.biasedCount && doc.result.biasedCount > 0) {
      totalFlagged++
    }
  })

  const letterDocuments = documents.filter(d => d.type === "letter-generation")
  const totalLetters = letterDocuments.length

  return {
    totalAnalyzed,
    totalInclusive,
    totalFlagged,
    totalLetters,
    allDocuments: documents,
  }
}

/**
 * Clear all cached documents
 */
export function clearDocumentCache(): void {
  try {
    localStorage.removeItem(CACHE_KEY)
  } catch (error) {
    console.error("Error clearing document cache:", error)
  }
}

/**
 * Remove a specific document from cache
 */
export function removeDocumentFromCache(documentId: string): void {
  try {
    const documents = getCachedDocuments()
    const filtered = documents.filter(d => d.id !== documentId)
    localStorage.setItem(CACHE_KEY, JSON.stringify(filtered))
  } catch (error) {
    console.error("Error removing document from cache:", error)
  }
}

/**
 * Generate a unique document ID
 */
function generateDocumentId(): string {
  return `doc_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
}