let token = ""; // ------------------ ADMIN LOGIN ------------------ async function loginAdmin() { const username = document.getElementById("adminUser").value; const password = document.getElementById("adminPass").value; if (!username || !password) { alert("Please enter username and password"); return; } const formData = new URLSearchParams(); formData.append("username", username); formData.append("password", password); formData.append("grant_type", "password"); try { const response = await fetch("/login", { method: "POST", headers: {"Content-Type":"application/x-www-form-urlencoded"}, body: formData }); const data = await response.json(); if (response.ok) { token = data.access_token; localStorage.setItem("token", token); alert("Login Successful"); document.getElementById("authSection").style.display = "none"; document.getElementById("adminPanel").style.display = "block"; loadDocs(); } else { alert(data.detail || "Login Failed"); } } catch (err) { console.error(err); alert("Login request failed"); } } // ------------------ UPLOAD DOCUMENT ------------------ async function uploadDocument() { const fileInput = document.getElementById("fileInput"); const file = fileInput.files[0]; if (!file) { alert("Please select a file"); return; } alert("File is being uploaded and indexed. Please wait ..."); const formData = new FormData(); formData.append("file", file); try { const res = await fetch("/admin/upload-document", { headers: {"Authorization": "Bearer " + token}, method: "POST", body: formData }); const data = await res.json(); if (data.message) { alert(data.message); } else if (data.error) { alert(data.error); } loadDocs(); } catch (err) { console.error(err); alert("Upload failed"); } } // ------------------ OTHER EXISTING FUNCTIONS ------------------ async function loadDocs() { try { const response = await fetch("/admin/list-documents", { headers: {"Authorization": "Bearer " + token} }); if (!response.ok) throw new Error("Failed to fetch documents"); const data = await response.json(); const table = document.getElementById("docTable"); if (!table) return; let rows = `DocumentChunksAction`; if (data.documents.length === 0) { rows += `No documents found`; } else { data.documents.forEach(doc => { rows += ` ${doc.document} ${doc.chunks} `; }); } table.innerHTML = rows; } catch (err) { console.error(err); } } async function deleteDocument(name, event) { if (!confirm("Delete " + name + " ?")) return; try { const btn = event.target; btn.disabled = true; btn.innerText = "Deleting..."; const params = new URLSearchParams({ filename: name }); const res = await fetch(`/admin/delete-document?${params.toString()}`, { headers: {"Authorization": "Bearer " + token}, method: "DELETE" }); const data = await res.json(); alert(data.message || "Deleted successfully"); await loadDocs(); } catch (err) { console.error(err); alert("Error deleting file"); } } async function deleteFolder() { const folder = prompt("Enter folder name to delete"); if (!folder) return; await fetch(`/admin/delete-folder?folder=${encodeURIComponent(folder)}`, { method: "DELETE", headers: {"Authorization": "Bearer " + token} }); loadDocs(); } async function resetIndex() { if (!confirm("Reset entire index?")) return; await fetch("/admin/reset-index?confirm=true", { headers: {"Authorization": "Bearer " + token}, method: "DELETE" }); loadDocs(); }