File size: 5,787 Bytes
ede5511
 
ac54ec5
 
ede5511
 
 
 
 
ac54ec5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ede5511
ac54ec5
ede5511
ac54ec5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ede5511
5d7163f
 
ede5511
 
 
e892728
 
 
5d7163f
ede5511
e892728
ede5511
 
e892728
ede5511
 
e892728
ac54ec5
e892728
 
ede5511
e892728
 
 
 
 
ede5511
 
 
 
 
 
e892728
ede5511
ac54ec5
ede5511
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e892728
ede5511
 
 
 
ac54ec5
 
ede5511
ac54ec5
 
ede5511
 
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
document.addEventListener("DOMContentLoaded", () => {
    const workerUrl = "https://ctmresearchagent.aiagents.workers.dev";
    
    // Chat elements
    const submitButton = document.getElementById("submitButton");
    const researchQueryInput = document.getElementById("researchQuery");
    const resultDisplay = document.getElementById("resultDisplay");
    const historyContainer = document.getElementById("historyContainer");

    // Document management elements
    const uploadForm = document.getElementById("uploadForm");
    const fileInput = document.getElementById("fileInput");
    const uploadStatus = document.getElementById("uploadStatus");
    const reportsList = document.getElementById("reportsList");

    /**
     * Handles file upload
     */
    async function handleFileUpload(event) {
        event.preventDefault();
        const file = fileInput.files[0];
        if (!file) {
            uploadStatus.textContent = 'Please select a file to upload.';
            uploadStatus.style.color = 'red';
            return;
        }

        uploadStatus.textContent = `Uploading ${file.name}...`;
        uploadStatus.style.color = 'blue';

        try {
            const formData = new FormData();
            formData.append('file', file);
            
            // Note: We're sending FormData, not JSON
            const response = await fetch(`${workerUrl}/api/upload`, {
                method: 'POST',
                body: formData,
            });

            const data = await response.json();

            if (!response.ok) {
                throw new Error(data.error || 'Upload failed');
            }
            
            uploadStatus.textContent = `Successfully uploaded ${file.name}!`;
            uploadStatus.style.color = 'green';
            uploadForm.reset();
            await loadReportsList(); // Refresh the list of reports

        } catch (error) {
            console.error("Upload error:", error);
            uploadStatus.textContent = `Error: ${error.message}`;
            uploadStatus.style.color = 'red';
        }
    }

    /**
     * Loads the list of available research reports
     */
    async function loadReportsList() {
        try {
            const response = await fetch(`${workerUrl}/api/documents`);
            if (!response.ok) throw new Error('Failed to fetch reports list.');

            const documents = await response.json();
            reportsList.innerHTML = ""; // Clear existing list

            if (documents.length === 0) {
                reportsList.innerHTML = "<p>No reports uploaded yet.</p>";
                return;
            }

            documents.forEach(doc => {
                const entryDiv = document.createElement("div");
                entryDiv.className = "report-entry";
                entryDiv.innerHTML = `
                    <span>${doc.filename}</span>
                    <span class="status ${doc.status.toLowerCase()}">${doc.status}</span>
                `;
                reportsList.appendChild(entryDiv);
            });

        } catch (error) {
            console.error(error);
            reportsList.innerHTML = "<p>Could not load reports.</p>";
        }
    }

    // --- AI Chat Functions (from previous step, unchanged) ---

    async function handleAiQuerySubmit() {
        const query = researchQueryInput.value.trim();
        if (!query) {
            alert("Please enter a research query.");
            return;
        }

        submitButton.disabled = true;
        submitButton.innerText = "Thinking...";
        resultDisplay.innerHTML = "<p>Generating response...</p>";

        try {
            const response = await fetch(`${workerUrl}/api/query`, {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ query: query }),
            });

            const data = await response.json();
            if (!response.ok) throw new Error(data.error || "An unknown error occurred.");
            resultDisplay.innerText = data.result;
            await loadResearchHistory();
        } catch (error) {
            console.error("Error fetching AI response:", error);
            resultDisplay.innerText = `Error: ${error.message}`;
        } finally {
            submitButton.disabled = false;
            submitButton.innerText = "Submit";
        }
    }

    async function loadResearchHistory() {
        try {
            const response = await fetch(`${workerUrl}/api/research`);
            if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
            const logs = await response.json();
            historyContainer.innerHTML = "";
            if (logs.length === 0) {
                historyContainer.innerHTML = "<p>No research history found.</p>";
                return;
            }
            logs.forEach(log => {
                const entryDiv = document.createElement("div");
                entryDiv.className = "history-entry";
                entryDiv.innerHTML = `
                    <p><strong>Query:</strong> ${log.query}</p>
                    <p><strong>Result:</strong> ${log.result}</p>
                    <p><small><em>${new Date(log.timestamp).toLocaleString()}</em></small></p>
                `;
                historyContainer.appendChild(entryDiv);
            });
        } catch (error) {
            console.error("Failed to load research history:", error);
            historyContainer.innerHTML = "<p>Error loading research history.</p>";
        }
    }

    // Event Listeners
    uploadForm.addEventListener("submit", handleFileUpload);
    submitButton.addEventListener("click", handleAiQuerySubmit);

    // Initial load
    loadReportsList();
    loadResearchHistory();
});