/** * Support Page Logic - Aadhaar Pro * Updated: real API calls, category field, ticket status colours */ document.addEventListener('DOMContentLoaded', () => { initSupportPage(); }); function initSupportPage() { loadRecentTickets(); setupTicketForm(); } // ── Form submission ──────────────────────────────────────────────── function setupTicketForm() { const form = document.getElementById('ticket-form'); if (!form) return; form.addEventListener('submit', async (e) => { e.preventDefault(); const data = { subject: document.getElementById('tick-subject').value.trim(), message: document.getElementById('tick-message').value.trim(), category: document.getElementById('tick-category')?.value || 'other' }; if (!data.subject || !data.message) { alert('Subject aur message dono bharna zaroori hai.'); return; } const btn = form.querySelector('[type="submit"]'); btn.disabled = true; try { const res = await fetch('/api/support/create', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); const body = await res.json(); if (body.success) { alert(`Ticket submit ho gaya! Ticket No: ${body.ticket_number}\nHamari team jald reply karegi.`); form.reset(); loadRecentTickets(); } else { alert('Error: ' + (body.error || 'Unknown error')); } } catch (err) { console.error('Support ticket error:', err); alert('Network error. Please try again.'); } finally { btn.disabled = false; } }); } // ── Load ticket list ─────────────────────────────────────────────── async function loadRecentTickets() { const container = document.getElementById('tickets-container'); if (!container) return; container.innerHTML = '

Loading...

'; try { const res = await fetch('/api/support/list'); const tickets = await res.json(); if (!Array.isArray(tickets) || tickets.length === 0) { container.innerHTML = '

Koi active ticket nahi mila.

'; return; } container.innerHTML = tickets.map(t => `
#${t.ticket_number}
${t.subject}
${t.date}
${statusLabel(t.status)}
`).join(''); } catch (err) { console.error('Error loading tickets:', err); container.innerHTML = '

Ticket history load nahi hua.

'; } } // ── Ticket detail modal ──────────────────────────────────────────── async function openTicketDetail(ticketId) { try { const res = await fetch(`/api/support/ticket/${ticketId}`); const ticket = await res.json(); if (ticket.error) { alert(ticket.error); return; } // Build modal HTML const messagesHtml = ticket.messages.map(m => `
${m.message}
${m.sender === 'admin' ? 'Support Team' : 'Aap'} · ${m.time}
`).join(''); showTicketModal({ number: ticket.ticket_number, subject: ticket.subject, status: ticket.status, category: ticket.category, date: ticket.date, messages: messagesHtml }); } catch (err) { console.error('openTicketDetail error:', err); alert('Ticket detail load nahi hua.'); } } function showTicketModal({ number, subject, status, category, date, messages }) { // Remove existing modal if any document.getElementById('ticket-detail-modal')?.remove(); const modal = document.createElement('div'); modal.id = 'ticket-detail-modal'; modal.style.cssText = ` position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:9999; background:rgba(0,0,0,0.55);backdrop-filter:blur(6px); display:flex;justify-content:center;align-items:center; `; modal.innerHTML = `
#${number}

${subject}

${statusLabel(status)} ${categoryLabel(category)} · ${date}
${messages}
`; // Close on backdrop click modal.addEventListener('click', (e) => { if (e.target === modal) modal.remove(); }); document.body.appendChild(modal); } // ── Helpers ──────────────────────────────────────────────────────── function statusLabel(status) { const map = { open: 'OPEN', pending: 'PENDING', resolved: 'RESOLVED', closed: 'CLOSED' }; return map[status] || status.toUpperCase(); } function categoryLabel(cat) { const map = { payment: 'Payment', wallet: 'Wallet', refund: 'Refund', other: 'Other' }; return map[cat] || cat; }