class BugReportModal { constructor() { this.modal = null; this.form = null; this.init(); } init() { this.modal = document.createElement("div"); this.modal.className = "bug-modal-overlay"; this.modal.style.cssText = "display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.7); justify-content:center; align-items:center; z-index:99999; font-family:sans-serif;"; this.modal.innerHTML = `

Report a Bug

`; document.body.appendChild(this.modal); this.form = this.modal.querySelector("#bugReportForm"); this.bindEvents(); } bindEvents() { const titleInput = this.modal.querySelector("#bugTitle"); const descInput = this.modal.querySelector("#bugDescription"); titleInput.addEventListener("input", () => { localStorage.setItem("draft_bug_title", titleInput.value); }); descInput.addEventListener("input", () => { localStorage.setItem("draft_bug_desc", descInput.value); }); this.modal.querySelector("#bugCancelBtn").addEventListener("click", () => { this.close(); }); this.modal.addEventListener("click", (e) => { if (e.target === this.modal) { this.close(); } }); this.form.addEventListener("submit", async (e) => { e.preventDefault(); const data = { title: titleInput.value, description: descInput.value, includeLogs: this.modal.querySelector("#bugIncludeLogs").value }; window.electronAPI.logInfo("Submitting:", data); try { const success = await window.topbarAPI.sendReport(data); if (success) { localStorage.removeItem("draft_bug_title"); localStorage.removeItem("draft_bug_desc"); this.form.reset(); this.close(); window.showSuccess("Bug report sent successfully!"); } } catch (err) { window.showError("Failed to send bug report."); window.electronAPI.logError("Failed to send bug report:", err.message); } }); } loadState() { const savedTitle = localStorage.getItem("draft_bug_title"); const savedDesc = localStorage.getItem("draft_bug_desc"); if (savedTitle) { this.modal.querySelector("#bugTitle").value = savedTitle; } if (savedDesc) { this.modal.querySelector("#bugDescription").value = savedDesc; } } open() { this.loadState(); this.modal.style.display = "flex"; } close() { this.modal.style.display = "none"; } } window.bugModal = new BugReportModal(); document.getElementById("report-bug-btn").addEventListener("click", () => { window.bugModal.open(); });