NeuraAI2025's picture
Upload 14 files
dea8d0d verified
const chatWindow = document.getElementById("chat-window");
const userInput = document.getElementById("user-input");
const sendBtn = document.getElementById("send-btn");
const upgradeBtn = document.getElementById("upgrade-btn");
const sessionHoursEl = document.getElementById("session-hours");
const bgSelect = document.getElementById("bg-select");
const langSelect = document.getElementById("lang-select");
const voiceToggle = document.getElementById("voice-toggle");
let voiceEnabled = true; // Default voice ON
const userId = "local_user"; // Can be dynamic
// ----------------------------
// Helper: Display message
// ----------------------------
function displayMessage(sender, msg) {
const div = document.createElement("div");
div.className = sender;
div.textContent = msg;
chatWindow.appendChild(div);
chatWindow.scrollTop = chatWindow.scrollHeight;
}
// ----------------------------
// Send message to Flask backend
// ----------------------------
async function sendMessage(message, premium=false) {
const res = await fetch(`/chat?msg=${encodeURIComponent(message)}&user_id=${userId}&premium=${premium}`);
const data = await res.json();
displayMessage("bot", data.reply);
sessionHoursEl.textContent = data.remaining_hours;
}
// ----------------------------
// Handle send button
// ----------------------------
sendBtn.addEventListener("click", () => {
const message = userInput.value.trim();
if(!message) return;
displayMessage("user", message);
sendMessage(message, false);
userInput.value = "";
});
// ----------------------------
// Handle Enter key
// ----------------------------
userInput.addEventListener("keypress", (e) => {
if(e.key === "Enter") sendBtn.click();
});
// ----------------------------
// Premium upgrade
// ----------------------------
upgradeBtn.addEventListener("click", async () => {
const res = await fetch(`/upgrade?user_id=${userId}`, {method: "POST"});
const data = await res.json();
displayMessage("bot", data.message);
sessionHoursEl.textContent = data.remaining_hours;
});
// ----------------------------
// Background selector
// ----------------------------
bgSelect.addEventListener("change", () => {
document.querySelector(".app-container").className = `app-container ${bgSelect.value}`;
});
// ----------------------------
// Language selector (placeholder)
// ----------------------------
langSelect.addEventListener("change", () => {
displayMessage("bot", `Language switched to ${langSelect.value}`);
});
// ----------------------------
// Voice toggle
// ----------------------------
voiceToggle.addEventListener("click", () => {
voiceEnabled = !voiceEnabled;
displayMessage("bot", `Voice ${voiceEnabled ? "enabled" : "disabled"}`);
});