import { fetchTicket, fetchComments, fetchHistory, createComment, formatDateTime, formatMinutes, getHistoryIcon, escapeHtml, linkify } from './ticket-shared.js'; document.addEventListener('DOMContentLoaded', () => { document.body.classList.add('user-view'); const ticketId = new URLSearchParams(window.location.search).get('id'); if (!ticketId) return (window.location.href = '/'); const ticketTitle = document.getElementById('ticket-title-text'); const ticketIdElem = document.getElementById('ticket-id-val'); const ticketStatus = document.getElementById('ticket-status-badge'); const ticketPriority = document.getElementById('priority-text'); const ticketDescription = document.getElementById('ticket-description-text'); const ticketCreated = document.getElementById('ticket-created'); const ticketUpdated = document.getElementById('ticket-updated'); const ticketCategory = document.getElementById('ticket-category'); const commentsContainer = document.getElementById('comments-container'); const historyContainer = document.getElementById('history-container'); const commentForm = document.getElementById('comment-form'); const tabBtns = document.querySelectorAll('.tab-btn'); let originalStatus = ''; let originalPriority = ''; async function loadTicketDetails() { const ticket = await fetchTicket(ticketId); if (!ticket) return alert('Ticket not found'); ticketTitle.textContent = ticket.title; ticketIdElem.textContent = ticket.id; ticketStatus.textContent = ticket.status; ticketDescription.innerHTML = linkify(ticket.description || ''); ticketCreated.textContent = formatDateTime(ticket.created_at); ticketUpdated.textContent = formatDateTime(ticket.updated_at); ticketPriority.textContent = ticket.priority; if (ticketCategory) ticketCategory.textContent = ticket.category || '—'; ticketStatus.className = `ticket-status status-${ticket.status.replace(/ /g, '-')}`; const totalTimeDisplay = document.getElementById('total-time'); if (totalTimeDisplay) totalTimeDisplay.textContent = formatMinutes(ticket.total_time || 0); originalStatus = ticket.status; originalPriority = ticket.priority; } async function loadComments() { const comments = await fetchComments(ticketId); commentsContainer.innerHTML = comments.map(comment => { const role = comment.role ? comment.role.toLowerCase() : 'user'; let avatarUrl = '/assets/user.jpg'; if (role === 'admin') avatarUrl = '/assets/admin.jpg'; return `