File size: 5,735 Bytes
ede5511
e11bb61
1d3a7b4
 
e11bb61
1d3a7b4
ac54ec5
1d3a7b4
e11bb61
1d3a7b4
 
 
e11bb61
1d3a7b4
e11bb61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d3a7b4
 
 
e11bb61
 
 
1d3a7b4
 
e11bb61
1d3a7b4
e11bb61
1d3a7b4
 
e11bb61
1d3a7b4
 
 
 
 
 
ac54ec5
e11bb61
 
 
 
 
ac54ec5
1d3a7b4
 
 
ede5511
1d3a7b4
e892728
 
 
ede5511
3b24fc9
e892728
ac54ec5
e892728
e11bb61
ede5511
e892728
 
 
 
ede5511
 
 
1d3a7b4
ede5511
 
3b24fc9
ede5511
ac54ec5
3b24fc9
ede5511
 
 
3b24fc9
ede5511
 
 
e892728
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
document.addEventListener("DOMContentLoaded", () => {
    const workerUrl = "https://ctmresearchagent.aiagents.workers.dev"; // Your worker URL
    
    // Event Listeners
    document.getElementById("uploadForm").addEventListener("submit", handleReportUpload);
    document.getElementById("submitButton").addEventListener("click", handleAiQuerySubmit);

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

    /**
     * NEW: Submits the structured report data as JSON
     */
    async function handleReportUpload(event) {
        event.preventDefault();
        const uploadButton = document.getElementById("uploadButton");
        const uploadStatus = document.getElementById("uploadStatus");
        const report = {
            title: document.getElementById('reportTitle').value,
            description: document.getElementById('reportDescription').value,
            body: document.getElementById('reportBody').value,
        };

        if (!report.title || !report.description || !report.body) {
            uploadStatus.textContent = 'Please fill out all fields.';
            return;
        }

        uploadButton.disabled = true;
        uploadButton.innerText = "Processing...";
        uploadStatus.textContent = "Submitting and processing report. This may take a moment...";

        try {
            const response = await fetch(`${workerUrl}/api/upload`, {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify(report),
            });
            const data = await response.json();
            if (!response.ok) throw new Error(data.error || 'Failed to process report.');
            
            uploadStatus.textContent = `Success: ${data.message}`;
            document.getElementById("uploadForm").reset();
            await loadReportsList(); // Refresh the list
        } catch (error) {
            uploadStatus.textContent = `Error: ${error.message}`;
        } finally {
            uploadButton.disabled = false;
            uploadButton.innerText = "Process and Add Report";
        }
    }

    /**
     * NEW: Loads the list of reports directly from the database
     */
    async function loadReportsList() {
        const reportsList = document.getElementById("reportsList");
        reportsList.innerHTML = "<p>Fetching reports...</p>";
        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 = "";
            if (documents.length === 0) { reportsList.innerHTML = "<p>No reports have been added yet.</p>"; return; }
            
            documents.forEach(doc => {
                const entryDiv = document.createElement("div");
                entryDiv.className = "report-entry";
                entryDiv.innerHTML = `<h3>${doc.title}</h3><p>${doc.description}</p>`;
                reportsList.appendChild(entryDiv);
            });
        } catch (error) {
            reportsList.innerHTML = `<p>Could not load reports: ${error.message}</p>`;
        }
    }

    // AI Query and History functions remain the same as the last working version
    async function handleAiQuerySubmit() { /* ... function code is unchanged ... */ }
    async function loadResearchHistory() { /* ... function code is unchanged ... */ }

    // Paste the unchanged functions here
    async function handleAiQuerySubmit() {
        const researchQueryInput = document.getElementById("researchQuery");
        const resultDisplay = document.getElementById("resultDisplay");
        const submitButton = document.getElementById("submitButton");
        const query = researchQueryInput.value.trim();
        if (!query) { alert("Please enter a 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) {
            resultDisplay.innerText = `Error: ${error.message}`;
        } finally {
            submitButton.disabled = false;
            submitButton.innerText = "Submit";
        }
    }
    async function loadResearchHistory() {
        const historyContainer = document.getElementById("historyContainer");
        try {
            const response = await fetch(`${workerUrl}/api/research`);
            if (!response.ok) throw new Error('Failed to load history.');
            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) {
            historyContainer.innerHTML = "<p>Error loading research history.</p>";
        }
    }
});