`).join('');
}
// --- FIRESTORE ACTIONS ---
async function setUserOnline() {
const userRef = doc(db, `/artifacts/${appId}/public/data/users`, currentUserId);
try {
await setDoc(userRef, { online: true });
} catch (error) {
console.error("Failed to set user online status:", error);
}
}
async function sendMessage(text) {
if (!text.trim()) return;
const messagesRef = collection(db, `/artifacts/${appId}/public/data/messages`);
try {
await addDoc(messagesRef, {
text: text,
senderId: currentUserId,
timestamp: serverTimestamp()
});
} catch (error) {
console.error("Error sending message:", error);
}
}
// --- EVENT HANDLERS ---
function handleMessageSubmit(e) {
e.preventDefault();
sendMessage(messageInput.value);
messageInput.value = '';
}
function generatePdf() {
const { jsPDF } = window.jspdf;
const pdfContent = document.getElementById('pdf-content');
const pdfTitleEl = document.getElementById('pdf-title');
if (!pdfContent) return;
const date = new Date().toLocaleDateString('en-US');
pdfTitleEl.textContent = `Chat Transcript - ${date}`;
html2canvas(pdfContent, { scale: 2, useCORS: true, logging: false })
.then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const ratio = canvas.width / canvas.height;
const imgHeight = (pdfWidth - 20) / ratio;
pdf.addImage(imgData, 'PNG', 10, 10, pdfWidth - 20, imgHeight);
pdf.save(`Chat-Transcript-${date}.pdf`);
pdfTitleEl.textContent = '';
});
}
function addEventListeners() {
tabButtons.forEach(button => {
button.addEventListener('click', () => {
const tab = button.dataset.tab;
tabButtons.forEach(btn => btn.classList.toggle('active', btn.dataset.tab === tab));
tabContents.forEach(content => content.classList.toggle('active', content.id.startsWith(tab)));
});
});
messageForm.addEventListener('submit', handleMessageSubmit);
downloadPdfBtn.addEventListener('click', generatePdf);
}
// --- START THE APP ---
initialize();
