<?php
$pageTitle = '我的工单';
require_once dirname(__DIR__) . '/config.php';
requireLogin();
require_once dirname(__DIR__) . '/includes/ticket_migrate.php';
require_once dirname(__DIR__) . '/includes/ticket_helper.php';
require_once dirname(__DIR__) . '/includes/email_helper.php';

if (!function_exists('sendTicketEmail')) {
    function sendTicketEmail($template_key, $to, array $vars = [], $to_admin = false) {
        if ($to_admin || $to === '') {
            $admin_emails = getAdminEmails();
            if (!empty($admin_emails)) {
                sendEmail($template_key, $admin_emails, $vars);
            }
        } else {
            sendEmail($template_key, $to, $vars);
        }
    }
}

$pdo = getDB();
runTicketMigration($pdo);

$uid = (int)$_SESSION['user_id'];
$user = getCurrentUser();
$action = $_GET['action'] ?? 'list';
$ticket_id = intval($_GET['id'] ?? 0);
$error = '';
$success = '';

// ── Handle POST ───────────────────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $post_action = $_POST['action'] ?? '';

    if ($post_action === 'create') {
        $subject  = trim($_POST['subject'] ?? '');
        $category = trim($_POST['category'] ?? 'general');
        $priority = trim($_POST['priority'] ?? 'normal');
        $body     = trim($_POST['body'] ?? '');
        if (!$subject || !$body) {
            $error = '请填写工单主题和问题描述';
        } else {
            $ticket_no = generateTicketNo();
            $stmt = $pdo->prepare("INSERT INTO tickets (ticket_no, user_id, subject, category, priority, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, 'open', NOW(), NOW())");
            $stmt->execute([$ticket_no, $uid, $subject, $category, $priority]);
            $new_ticket_id = (int)$pdo->lastInsertId();

            // Insert first reply (the initial message)
            $reply_stmt = $pdo->prepare("INSERT INTO ticket_replies (ticket_id, author_type, author_id, author_name, body, created_at) VALUES (?, 'user', ?, ?, ?, NOW())");
            $reply_stmt->execute([$new_ticket_id, $uid, $user['email'], $body]);
            $reply_id = (int)$pdo->lastInsertId();

            // Handle attachments
            if (!empty($_FILES['attachments']['name'][0])) {
                foreach ($_FILES['attachments']['name'] as $i => $fname) {
                    if ($_FILES['attachments']['error'][$i] === UPLOAD_ERR_OK) {
                        $file = [
                            'name'     => $fname,
                            'tmp_name' => $_FILES['attachments']['tmp_name'][$i],
                            'size'     => $_FILES['attachments']['size'][$i],
                            'error'    => $_FILES['attachments']['error'][$i],
                        ];
                        $path = uploadTicketAttachment($file, $new_ticket_id);
                        if ($path) {
                            $att_stmt = $pdo->prepare("INSERT INTO ticket_attachments (reply_id, ticket_id, filename, filepath, filesize, mime_type, created_at) VALUES (?, ?, ?, ?, ?, ?, NOW())");
                            $finfo = finfo_open(FILEINFO_MIME_TYPE);
                            $mime = finfo_file($finfo, $_FILES['attachments']['tmp_name'][$i]);
                            finfo_close($finfo);
                            $att_stmt->execute([$reply_id, $new_ticket_id, $fname, $path, $_FILES['attachments']['size'][$i], $mime]);
                        }
                    }
                }
            }

            // Send emails
            $site_url = defined('SITE_URL') ? SITE_URL : getSetting('site_url');
            $cat_label = getTicketCategoryLabel($category);
            $pri_map = ['low'=>'低','normal'=>'普通','high'=>'高','urgent'=>'紧急'];
            $pri_label = $pri_map[$priority] ?? $priority;
            sendTicketEmail('ticket_created_user', $user['email'], [
                'ticket_no'  => $ticket_no,
                'subject'    => $subject,
                'category'   => $cat_label,
                'priority'   => $pri_label,
                'created_at' => date('Y-m-d H:i:s'),
                'site_url'   => $site_url,
            ]);
            sendTicketEmail('ticket_created_admin', '', [
                'ticket_no'    => $ticket_no,
                'user_email'   => $user['email'],
                'subject'      => $subject,
                'category'     => $cat_label,
                'priority'     => $pri_label,
                'body_preview' => mb_substr(strip_tags($body), 0, 200),
                'site_url'     => $site_url,
            ], true);

            header("Location: /user/tickets.php?id=$new_ticket_id&success=created");
            exit;
        }
    } elseif ($post_action === 'reply' && $ticket_id > 0) {
        $body = trim($_POST['body'] ?? '');
        if (!$body) {
            $error = '请填写回复内容';
        } else {
            // Verify ticket belongs to user and is not closed
            $t = $pdo->prepare("SELECT * FROM tickets WHERE id = ? AND user_id = ?");
            $t->execute([$ticket_id, $uid]);
            $ticket = $t->fetch();
            if (!$ticket || $ticket['status'] === 'closed') {
                $error = '工单不存在或已关闭';
            } else {
                $reply_stmt = $pdo->prepare("INSERT INTO ticket_replies (ticket_id, author_type, author_id, author_name, body, created_at) VALUES (?, 'user', ?, ?, ?, NOW())");
                $reply_stmt->execute([$ticket_id, $uid, $user['email'], $body]);
                $reply_id = (int)$pdo->lastInsertId();

                // Handle attachments
                if (!empty($_FILES['attachments']['name'][0])) {
                    foreach ($_FILES['attachments']['name'] as $i => $fname) {
                        if ($_FILES['attachments']['error'][$i] === UPLOAD_ERR_OK) {
                            $file = [
                                'name'     => $fname,
                                'tmp_name' => $_FILES['attachments']['tmp_name'][$i],
                                'size'     => $_FILES['attachments']['size'][$i],
                                'error'    => $_FILES['attachments']['error'][$i],
                            ];
                            $path = uploadTicketAttachment($file, $ticket_id);
                            if ($path) {
                                $att_stmt = $pdo->prepare("INSERT INTO ticket_attachments (reply_id, ticket_id, filename, filepath, filesize, mime_type, created_at) VALUES (?, ?, ?, ?, ?, ?, NOW())");
                                $finfo = finfo_open(FILEINFO_MIME_TYPE);
                                $mime = finfo_file($finfo, $_FILES['attachments']['tmp_name'][$i]);
                                finfo_close($finfo);
                                $att_stmt->execute([$reply_id, $ticket_id, $fname, $path, $_FILES['attachments']['size'][$i], $mime]);
                            }
                        }
                    }
                }

                // Update ticket status to open if resolved
                if ($ticket['status'] === 'resolved') {
                    $pdo->prepare("UPDATE tickets SET status='open', updated_at=NOW() WHERE id=?")->execute([$ticket_id]);
                } else {
                    $pdo->prepare("UPDATE tickets SET updated_at=NOW() WHERE id=?")->execute([$ticket_id]);
                }

                // Notify admins
                $site_url = defined('SITE_URL') ? SITE_URL : getSetting('site_url');
                sendTicketEmail('ticket_reply_admin', '', [
                    'ticket_no'    => $ticket['ticket_no'],
                    'user_email'   => $user['email'],
                    'subject'      => $ticket['subject'],
                    'replied_at'   => date('Y-m-d H:i:s'),
                    'reply_preview'=> mb_substr(strip_tags($body), 0, 300),
                    'ticket_id'    => $ticket_id,
                    'site_url'     => $site_url,
                ], true);

                header("Location: /user/tickets.php?id=$ticket_id&success=replied#reply-$reply_id");
                exit;
            }
        }
    } elseif ($post_action === 'close' && $ticket_id > 0) {
        $t = $pdo->prepare("SELECT * FROM tickets WHERE id = ? AND user_id = ?");
        $t->execute([$ticket_id, $uid]);
        $ticket = $t->fetch();
        if ($ticket && $ticket['status'] !== 'closed') {
            $pdo->prepare("UPDATE tickets SET status='closed', closed_at=NOW(), updated_at=NOW() WHERE id=?")->execute([$ticket_id]);
            $site_url = defined('SITE_URL') ? SITE_URL : getSetting('site_url');
            sendTicketEmail('ticket_closed', $user['email'], [
                'ticket_no' => $ticket['ticket_no'],
                'subject'   => $ticket['subject'],
                'closed_at' => date('Y-m-d H:i:s'),
                'site_url'  => $site_url,
            ]);
        }
        header("Location: /user/tickets.php?id=$ticket_id&success=closed");
        exit;
    }
}

// ── GET: success flash ────────────────────────────────────────────────────────
if (isset($_GET['success'])) {
    switch ($_GET['success']) {
        case 'created':
            $success = '工单已成功提交，我们将尽快处理！';
            break;
        case 'replied':
            $success = '回复已发送';
            break;
        case 'closed':
            $success = '工单已关闭';
            break;
        default:
            $success = '';
            break;
    }
}

// ── Load data ─────────────────────────────────────────────────────────────────
$ticket = null;
$replies = [];
if ($ticket_id > 0) {
    $t = $pdo->prepare("SELECT * FROM tickets WHERE id = ? AND user_id = ?");
    $t->execute([$ticket_id, $uid]);
    $ticket = $t->fetch();
    if ($ticket) {
        $r = $pdo->prepare("SELECT * FROM ticket_replies WHERE ticket_id = ? AND is_internal = 0 ORDER BY created_at ASC");
        $r->execute([$ticket_id]);
        $replies = $r->fetchAll();
        // Load attachments for each reply
        foreach ($replies as &$reply) {
            $a = $pdo->prepare("SELECT * FROM ticket_attachments WHERE reply_id = ?");
            $a->execute([$reply['id']]);
            $reply['attachments'] = $a->fetchAll();
        }
        unset($reply);
    }
}

// Ticket list
$tickets = $pdo->prepare("SELECT * FROM tickets WHERE user_id = ? ORDER BY updated_at DESC");
$tickets->execute([$uid]);
$ticket_list = $tickets->fetchAll();
$open_count = count(array_filter($ticket_list, fn($t) => in_array($t['status'], ['open','in_progress'])));

require_once dirname(__DIR__) . '/includes/header.php';
?>

<style>
.ticket-sidebar { min-width: 220px; }
.ticket-card { border-left: 4px solid #dee2e6; transition: .15s; }
.ticket-card:hover { border-left-color: #0d6efd; background: #f8f9ff; }
.ticket-card.status-open { border-left-color: #0d6efd; }
.ticket-card.status-in_progress { border-left-color: #ffc107; }
.ticket-card.status-resolved { border-left-color: #198754; }
.ticket-card.status-closed { border-left-color: #adb5bd; }
.reply-bubble { border-radius: 12px; padding: 16px 20px; margin-bottom: 16px; }
.reply-user { background: #e8f4ff; border: 1px solid #b8d9f8; }
.reply-admin { background: #f0fff4; border: 1px solid #b2dfdb; }
.reply-meta { font-size: .78rem; color: #888; margin-bottom: 6px; }
.reply-body img { max-width: 100%; border-radius: 6px; margin: 4px 0; }
.attachment-chip { display: inline-flex; align-items: center; gap: 6px; background: #f1f3f5; border: 1px solid #dee2e6; border-radius: 20px; padding: 4px 12px; font-size: .78rem; text-decoration: none; color: #495057; margin: 2px; }
.attachment-chip:hover { background: #e9ecef; color: #212529; }
.att-group { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
.att-img-wrap { display: flex; flex-direction: column; align-items: center; gap: 4px; }
.att-img { max-width: 220px; max-height: 180px; width: auto; height: auto; border-radius: 8px; border: 1px solid #dee2e6; object-fit: cover; cursor: zoom-in; transition: box-shadow .2s; }
.att-img:hover { box-shadow: 0 4px 16px rgba(0,0,0,.18); }
.att-img-name { font-size: .72rem; color: #6c757d; max-width: 220px; text-align: center; word-break: break-all; }
</style>

<div class="container py-4">
    <div class="row">
        <!-- Sidebar -->
        <div class="col-md-3 col-lg-2 mb-4">
            <?php require_once __DIR__ . '/sidebar.php'; ?>
        </div>

        <!-- Main -->
        <div class="col-md-9 col-lg-10">
            <?php if ($success): ?>
            <div class="alert alert-success alert-dismissible fade show">
                <i class="fas fa-check-circle me-2"></i><?php echo htmlspecialchars($success); ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
            </div>
            <?php endif; ?>
            <?php if ($error): ?>
            <div class="alert alert-danger"><i class="fas fa-exclamation-circle me-2"></i><?php echo htmlspecialchars($error); ?></div>
            <?php endif; ?>

            <?php if ($ticket): ?>
            <!-- ===== Ticket Detail View ===== -->
            <div class="d-flex justify-content-between align-items-center mb-3">
                <div>
                    <a href="/user/tickets.php" class="btn btn-sm btn-outline-secondary me-2"><i class="fas fa-arrow-left me-1"></i>返回列表</a>
                    <span class="fw-bold fs-5"><?php echo htmlspecialchars($ticket['subject']); ?></span>
                </div>
                <div class="d-flex gap-2 align-items-center">
                    <?php echo getTicketStatusLabel($ticket['status']); ?>
                    <?php echo getTicketPriorityLabel($ticket['priority']); ?>
                    <?php if ($ticket['status'] !== 'closed'): ?>
                    <form method="POST" class="d-inline" onsubmit="return confirm('确定关闭此工单？')">
                        <input type="hidden" name="action" value="close">
                        <button type="submit" class="btn btn-sm btn-outline-secondary">
                            <i class="fas fa-times-circle me-1"></i>关闭工单
                        </button>
                    </form>
                    <?php endif; ?>
                </div>
            </div>

            <div class="card border-0 shadow-sm mb-3">
                <div class="card-body p-3">
                    <div class="row g-3 text-muted small">
                        <div class="col-md-3"><i class="fas fa-hashtag me-1"></i><strong>工单编号：</strong><?php echo htmlspecialchars($ticket['ticket_no']); ?></div>
                        <div class="col-md-3"><i class="fas fa-tag me-1"></i><strong>类别：</strong><?php echo getTicketCategoryLabel($ticket['category']); ?></div>
                        <div class="col-md-3"><i class="fas fa-clock me-1"></i><strong>提交时间：</strong><?php echo $ticket['created_at']; ?></div>
                        <div class="col-md-3"><i class="fas fa-sync me-1"></i><strong>最后更新：</strong><?php echo $ticket['updated_at']; ?></div>
                    </div>
                </div>
            </div>

            <!-- Replies -->
            <div class="mb-4">
                <?php foreach ($replies as $reply): ?>
                <div class="reply-bubble <?php echo $reply['author_type'] === 'admin' ? 'reply-admin' : 'reply-user'; ?>" id="reply-<?php echo $reply['id']; ?>">
                    <div class="reply-meta d-flex justify-content-between">
                        <span>
                            <?php if ($reply['author_type'] === 'admin'): ?>
                            <i class="fas fa-user-shield text-success me-1"></i><strong class="text-success">VmShell 支持团队</strong>
                            <?php else: ?>
                            <i class="fas fa-user text-primary me-1"></i><strong class="text-primary"><?php echo htmlspecialchars($reply['author_name']); ?></strong>
                            <?php endif; ?>
                        </span>
                        <span><?php echo $reply['created_at']; ?></span>
                    </div>
                    <div class="reply-body"><?php echo $reply['body']; ?></div>
                    <?php if (!empty($reply['attachments'])): ?>
                    <div class="mt-3 att-group">
                        <?php foreach ($reply['attachments'] as $att):
                            $fp = '/' . ltrim($att['filepath'], '/');
                            $is_img = (strncmp($att['mime_type'], 'image/', 6) === 0);
                        ?>
                        <?php if ($is_img): ?>
                        <div class="att-img-wrap">
                            <a href="<?php echo htmlspecialchars($fp); ?>" target="_blank">
                                <img src="<?php echo htmlspecialchars($fp); ?>"
                                     alt="<?php echo htmlspecialchars($att['filename']); ?>"
                                     class="att-img">
                            </a>
                            <div class="att-img-name"><?php echo htmlspecialchars($att['filename']); ?> <span class="text-muted">(<?php echo round($att['filesize']/1024); ?>KB)</span></div>
                        </div>
                        <?php else: ?>
                        <a href="<?php echo htmlspecialchars($fp); ?>" class="attachment-chip" target="_blank">
                            <i class="fas fa-file-alt"></i><?php echo htmlspecialchars($att['filename']); ?>
                            <span class="text-muted">(<?php echo round($att['filesize']/1024); ?>KB)</span>
                        </a>
                        <?php endif; ?>
                        <?php endforeach; ?>
                    </div>
                    <?php endif; ?>
                </div>
                <?php endforeach; ?>
            </div>

            <!-- Reply form -->
            <?php if ($ticket['status'] !== 'closed'): ?>
            <div class="card border-0 shadow-sm">
                <div class="card-header bg-white fw-bold"><i class="fas fa-reply text-primary me-2"></i>回复工单</div>
                <div class="card-body p-4">
                    <form method="POST" enctype="multipart/form-data">
                        <input type="hidden" name="action" value="reply">
                        <div class="mb-3">
                            <label class="form-label fw-semibold">回复内容 <span class="text-danger">*</span></label>
                            <!-- Rich text editor toolbar -->
                            <div class="border rounded-top p-2 bg-light d-flex gap-1 flex-wrap" id="editor-toolbar">
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('bold')" title="粗体"><i class="fas fa-bold"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('italic')" title="斜体"><i class="fas fa-italic"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('underline')" title="下划线"><i class="fas fa-underline"></i></button>
                                <span class="border-start mx-1"></span>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('insertUnorderedList')" title="无序列表"><i class="fas fa-list-ul"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('insertOrderedList')" title="有序列表"><i class="fas fa-list-ol"></i></button>
                                <span class="border-start mx-1"></span>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="insertLink()" title="插入链接"><i class="fas fa-link"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="document.getElementById('img-upload').click()" title="插入图片"><i class="fas fa-image"></i></button>
                                <input type="file" id="img-upload" accept="image/*" class="d-none" onchange="insertImage(this)">
                            </div>
                            <div id="reply-editor" contenteditable="true" class="form-control rounded-0 rounded-bottom" style="min-height:140px;outline:none;overflow-y:auto;" oninput="syncBody()"></div>
                            <input type="hidden" name="body" id="body-input">
                        </div>
                        <div class="mb-3">
                            <label class="form-label fw-semibold"><i class="fas fa-paperclip me-1"></i>附件（可选，支持图片/PDF，最大5MB）</label>
                            <input type="file" name="attachments[]" class="form-control" multiple accept="image/*,.pdf,.txt">
                        </div>
                        <button type="submit" class="btn btn-primary" onclick="syncBody()">
                            <i class="fas fa-paper-plane me-2"></i>发送回复
                        </button>
                    </form>
                </div>
            </div>
            <?php else: ?>
            <div class="alert alert-secondary"><i class="fas fa-lock me-2"></i>此工单已关闭，如需继续获取帮助，请<a href="/user/tickets.php?action=new">提交新工单</a>。</div>
            <?php endif; ?>

            <?php elseif ($action === 'new'): ?>
            <!-- ===== New Ticket Form ===== -->
            <div class="d-flex justify-content-between align-items-center mb-4">
                <h4 class="fw-bold mb-0"><i class="fas fa-plus-circle text-primary me-2"></i>提交新工单</h4>
                <a href="/user/tickets.php" class="btn btn-outline-secondary btn-sm"><i class="fas fa-arrow-left me-1"></i>返回列表</a>
            </div>
            <div class="card border-0 shadow-sm">
                <div class="card-body p-4">
                    <form method="POST" enctype="multipart/form-data">
                        <input type="hidden" name="action" value="create">
                        <div class="row g-3 mb-3">
                            <div class="col-md-8">
                                <label class="form-label fw-semibold">工单主题 <span class="text-danger">*</span></label>
                                <input type="text" name="subject" class="form-control" placeholder="请简要描述您的问题" required maxlength="255">
                            </div>
                            <div class="col-md-2">
                                <label class="form-label fw-semibold">类别</label>
                                <select name="category" class="form-select">
                                    <option value="general">一般咨询</option>
                                    <option value="billing">账单/支付</option>
                                    <option value="technical">技术问题</option>
                                    <option value="esim">eSIM 相关</option>
                                    <option value="phone">手机号码</option>
                                    <option value="shipping">物流/快递</option>
                                    <option value="account">账号问题</option>
                                    <option value="other">其他</option>
                                </select>
                            </div>
                            <div class="col-md-2">
                                <label class="form-label fw-semibold">优先级</label>
                                <select name="priority" class="form-select">
                                    <option value="low">低</option>
                                    <option value="normal" selected>普通</option>
                                    <option value="high">高</option>
                                    <option value="urgent">紧急</option>
                                </select>
                            </div>
                        </div>
                        <div class="mb-3">
                            <label class="form-label fw-semibold">问题描述 <span class="text-danger">*</span></label>
                            <!-- Rich text editor -->
                            <div class="border rounded-top p-2 bg-light d-flex gap-1 flex-wrap" id="editor-toolbar">
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('bold')"><i class="fas fa-bold"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('italic')"><i class="fas fa-italic"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('underline')"><i class="fas fa-underline"></i></button>
                                <span class="border-start mx-1"></span>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('insertUnorderedList')"><i class="fas fa-list-ul"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="execCmd('insertOrderedList')"><i class="fas fa-list-ol"></i></button>
                                <span class="border-start mx-1"></span>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="insertLink()"><i class="fas fa-link"></i></button>
                                <button type="button" class="btn btn-sm btn-outline-secondary" onclick="document.getElementById('img-upload').click()"><i class="fas fa-image"></i></button>
                                <input type="file" id="img-upload" accept="image/*" class="d-none" onchange="insertImage(this)">
                            </div>
                            <div id="reply-editor" contenteditable="true" class="form-control rounded-0 rounded-bottom" style="min-height:180px;outline:none;overflow-y:auto;" oninput="syncBody()"></div>
                            <input type="hidden" name="body" id="body-input">
                        </div>
                        <div class="mb-4">
                            <label class="form-label fw-semibold"><i class="fas fa-paperclip me-1"></i>附件（可选，支持图片/PDF，最大5MB，可多选）</label>
                            <input type="file" name="attachments[]" class="form-control" multiple accept="image/*,.pdf,.txt">
                        </div>
                        <button type="submit" class="btn btn-primary btn-lg" onclick="syncBody()">
                            <i class="fas fa-paper-plane me-2"></i>提交工单
                        </button>
                    </form>
                </div>
            </div>

            <?php else: ?>
            <!-- ===== Ticket List ===== -->
            <div class="d-flex justify-content-between align-items-center mb-4">
                <h4 class="fw-bold mb-0">
                    <i class="fas fa-headset text-primary me-2"></i>我的工单
                    <?php if ($open_count > 0): ?>
                    <span class="badge bg-danger ms-2"><?php echo $open_count; ?> 待处理</span>
                    <?php endif; ?>
                </h4>
                <a href="/user/tickets.php?action=new" class="btn btn-primary">
                    <i class="fas fa-plus me-2"></i>提交新工单
                </a>
            </div>

            <?php if (empty($ticket_list)): ?>
            <div class="card border-0 shadow-sm">
                <div class="card-body text-center py-5">
                    <i class="fas fa-headset fa-3x text-muted mb-3"></i>
                    <h5 class="text-muted">暂无工单</h5>
                    <p class="text-muted">遇到问题？提交工单，我们将在 24 小时内回复您。</p>
                    <a href="/user/tickets.php?action=new" class="btn btn-primary mt-2">
                        <i class="fas fa-plus me-2"></i>提交第一个工单
                    </a>
                </div>
            </div>
            <?php else: ?>
            <div class="card border-0 shadow-sm">
                <div class="list-group list-group-flush">
                    <?php foreach ($ticket_list as $t): ?>
                    <a href="/user/tickets.php?id=<?php echo $t['id']; ?>" class="list-group-item list-group-item-action ticket-card status-<?php echo $t['status']; ?> p-3">
                        <div class="d-flex justify-content-between align-items-start">
                            <div class="flex-grow-1">
                                <div class="d-flex align-items-center gap-2 mb-1">
                                    <?php echo getTicketStatusLabel($t['status']); ?>
                                    <?php echo getTicketPriorityLabel($t['priority']); ?>
                                    <span class="badge bg-light text-dark border small"><?php echo getTicketCategoryLabel($t['category']); ?></span>
                                </div>
                                <div class="fw-semibold"><?php echo htmlspecialchars($t['subject']); ?></div>
                                <div class="text-muted small mt-1">
                                    <i class="fas fa-hashtag me-1"></i><?php echo htmlspecialchars($t['ticket_no']); ?>
                                    &nbsp;·&nbsp;
                                    <i class="fas fa-clock me-1"></i><?php echo $t['updated_at']; ?>
                                </div>
                            </div>
                            <i class="fas fa-chevron-right text-muted ms-3 mt-2"></i>
                        </div>
                    </a>
                    <?php endforeach; ?>
                </div>
            </div>
            <?php endif; ?>
            <?php endif; ?>
        </div>
    </div>
</div>

<script>
function execCmd(cmd) {
    document.getElementById('reply-editor').focus();
    document.execCommand(cmd, false, null);
}
function syncBody() {
    document.getElementById('body-input').value = document.getElementById('reply-editor').innerHTML;
}
function insertLink() {
    const url = prompt('请输入链接地址：', 'https://');
    if (url) {
        document.getElementById('reply-editor').focus();
        document.execCommand('createLink', false, url);
    }
}
function insertImage(input) {
    if (!input.files || !input.files[0]) return;
    const reader = new FileReader();
    reader.onload = function(e) {
        document.getElementById('reply-editor').focus();
        document.execCommand('insertImage', false, e.target.result);
        syncBody();
    };
    reader.readAsDataURL(input.files[0]);
}
// Sync body before any form submit
document.querySelectorAll('form').forEach(function(f) {
    f.addEventListener('submit', function() { syncBody(); });
});
</script>

<?php require_once dirname(__DIR__) . '/includes/footer.php'; ?>
