<?php
$pageTitle = 'پشتیبانی و برداشت‌ها';

// Permission: owner OR 'support' OR 'withdrawals'. The page hosts two tabs and
// either permission grants access to at least one of them.
if (!$adminAuth->isOwner()
    && !$adminAuth->hasPermission('support')
    && !$adminAuth->hasPermission('withdrawals')) {
    http_response_code(403);
    echo 'Access Denied';
    exit;
}

// ── Active tab resolution (SSR default) ─────────────────────────────
// The tab is only used to decide which div is visible on first paint and
// to gate the AJAX endpoints. Tab switching itself is fully client-side.
$tab = $_GET['tab'] ?? 'tickets';
if (!in_array($tab, ['tickets', 'withdrawals'], true)) {
    $tab = 'tickets';
}

// Hide a tab from a user who lacks its specific permission. (Owner sees both.)
$canTickets     = $adminAuth->isOwner() || $adminAuth->hasPermission('support');
$canWithdrawals = $adminAuth->isOwner() || $adminAuth->hasPermission('withdrawals');

// If the requested tab isn't accessible, fall back to whichever tab is.
if ($tab === 'tickets' && !$canTickets) {
    $tab = $canWithdrawals ? 'withdrawals' : 'tickets';
}
if ($tab === 'withdrawals' && !$canWithdrawals) {
    $tab = $canTickets ? 'tickets' : 'withdrawals';
}

// ── AJAX: tickets list ───────────────────────────────────────────────
// Both AJAX endpoints are always reachable on this page (regardless of which
// tab is currently visible) so the polling never breaks when the user toggles
// tabs. The permission check above already gates the page itself.
if (isset($_GET['ajax']) && $_GET['ajax'] === 'tickets_list' && $canTickets) {
    header('Content-Type: application/json; charset=utf-8');
    $tickets = Database::getAllTickets(100);
    $openCount = 0;
    $rows = [];
    foreach ($tickets as $t) {
        if ($t['status'] !== 'closed') $openCount++;
        $rows[] = [
            'id'         => (int)$t['id'],
            'user_id'    => (string)$t['user_id'],
            'user_name'  => $t['user_name'] ?? ('user ' . $t['user_id']),
            'question'   => mb_substr($t['question'], 0, 80),
            'full_q'     => mb_strlen($t['question']) > 80,
            'status'     => $t['status'],
            'admin_name' => $t['admin_name'] ?? '',
            'time'       => $t['question_time'],
        ];
    }
    echo json_encode(['total' => count($rows), 'open' => $openCount, 'rows' => $rows]);
    exit;
}

// ── AJAX: withdrawals list ───────────────────────────────────────────
if (isset($_GET['ajax']) && $_GET['ajax'] === 'withdrawals_list' && $canWithdrawals) {
    header('Content-Type: application/json; charset=utf-8');
    $withdrawals = Database::getAllWithdrawals(100);
    $openCount = 0;
    $rows = [];
    $typeNames = ['charge' => 'شارژ', 'stars' => 'استارز', 'card' => 'کارت به کارت'];
    foreach ($withdrawals as $w) {
        // "Open" = any non-terminal status (waiting for admin action).
        if (!in_array($w['status'], ['closed', 'approved', 'rejected', 'paid'], true)) $openCount++;
        $rows[] = [
            'id'           => (int)$w['id'],
            'user_id'      => (string)$w['user_id'],
            'type'         => $w['type'],
            'type_label'   => $typeNames[$w['type']] ?? $w['type'],
            'status'       => $w['status'],
            'admin_name'   => $w['admin_name'] ?? '',
            'question_time'=> $w['question_time'] ?? '',
            'amount'       => (int)($w['amount'] ?? 0),
            'operator'     => $w['operator'] ?? '',
        ];
    }
    echo json_encode(['total' => count($rows), 'open' => $openCount, 'rows' => $rows]);
    exit;
}

// Initial pre-render (for SSR fallback before AJAX fires). Both lists are
// always fetched so the open-count badges on both tab buttons are correct
// regardless of which tab is the SSR default.
$tickets = $canTickets ? Database::getAllTickets(100) : [];
$ticketOpenCount = 0;
foreach ($tickets as $t) { if ($t['status'] !== 'closed') $ticketOpenCount++; }

$withdrawals = $canWithdrawals ? Database::getAllWithdrawals(100) : [];
$withdrawalOpenCount = 0;
foreach ($withdrawals as $w) {
    if (!in_array($w['status'], ['closed', 'approved', 'rejected', 'paid'], true)) $withdrawalOpenCount++;
}

require __DIR__ . '/layout_top.php';
?>

<div class="page-header" style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:24px;">
    <h1 style="font-size:26px;font-weight:800;background:linear-gradient(135deg,#e6f0ff,#22d3ee);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;display:flex;align-items:center;gap:10px;"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="-webkit-text-fill-color:initial;color:#22d3ee;"><circle cx="12" cy="12" r="10"/><path d="m4.93 4.93 4.24 4.24"/><path d="m14.83 9.17 4.24-4.24"/><path d="m14.83 14.83 4.24 4.24"/><path d="m9.17 14.83-4.24 4.24"/><circle cx="12" cy="12" r="4"/></svg> پشتیبانی و برداشت‌ها</h1>
    <span style="font-size:13px;color:#5a6b85;font-weight:500;">خانه / پشتیبانی و برداشت‌ها</span>
</div>

<?php if ($flash): ?>
    <div class="alert alert-<?= e($flash['type']) ?>" style="margin-bottom:16px;"><?= e($flash['msg']) ?></div>
<?php endif; ?>

<!-- ═══ Tabs (client-side toggle, no page reload) ═══ -->
<div class="glass-card" style="padding:6px;margin-bottom:20px;display:flex;gap:6px;flex-wrap:wrap;">
    <?php if ($canTickets): ?>
    <button type="button" id="tabBtnTickets" class="btn btn-sm" style="flex:1;min-width:140px;justify-content:center;display:inline-flex;align-items:center;gap:8px;cursor:pointer;" onclick="showTab('tickets')">
        <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
        تیکت‌ها
        <?php if ($ticketOpenCount > 0): ?>
            <span id="tabBadgeTickets" style="background:rgba(248,113,113,0.2);color:#f87171;padding:1px 8px;border-radius:50px;font-size:11px;font-weight:700;"><?= $ticketOpenCount ?></span>
        <?php else: ?>
            <span id="tabBadgeTickets" style="display:none;background:rgba(248,113,113,0.2);color:#f87171;padding:1px 8px;border-radius:50px;font-size:11px;font-weight:700;"></span>
        <?php endif; ?>
    </button>
    <?php endif; ?>
    <?php if ($canWithdrawals): ?>
    <button type="button" id="tabBtnWithdrawals" class="btn btn-sm" style="flex:1;min-width:140px;justify-content:center;display:inline-flex;align-items:center;gap:8px;cursor:pointer;" onclick="showTab('withdrawals')">
        <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="16" height="20" x="4" y="2" rx="2"/><path d="M9 22v-4h6v4"/><path d="M8 6h.01"/><path d="M16 6h.01"/><path d="M12 6h.01"/></svg>
        درخواست‌های برداشت
        <?php if ($withdrawalOpenCount > 0): ?>
            <span id="tabBadgeWithdrawals" style="background:rgba(248,113,113,0.2);color:#f87171;padding:1px 8px;border-radius:50px;font-size:11px;font-weight:700;"><?= $withdrawalOpenCount ?></span>
        <?php else: ?>
            <span id="tabBadgeWithdrawals" style="display:none;background:rgba(248,113,113,0.2);color:#f87171;padding:1px 8px;border-radius:50px;font-size:11px;font-weight:700;"></span>
        <?php endif; ?>
    </button>
    <?php endif; ?>
</div>

<!-- ═══════════════════════════════════════════════════════════════════ -->
<!-- TICKETS TAB                                                       -->
<!-- ═══════════════════════════════════════════════════════════════════ -->
<div id="tab-tickets"<?= $canTickets ? '' : ' style="display:none;"' ?>>
<!-- Open alert -->
<div id="ticketsOpenAlert" class="alert alert-warning" style="margin-bottom:16px;<?= $ticketOpenCount === 0 ? 'display:none;' : '' ?>">
    <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-3px;margin-left:6px;"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><line x1="12" x2="12" y1="9" y2="13"/><line x1="12" x2="12.01" y1="17" y2="17"/></svg> <span><b id="ticketsOpenCount"><?= $ticketOpenCount ?></b> تیکت باز منتظر پاسخ است.</span>
</div>

<!-- Tickets list -->
<div class="glass-card" style="padding:20px 24px;">
    <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px;">
        <span style="font-size:15px;font-weight:700;color:#e6f0ff;display:flex;align-items:center;gap:8px;">
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m4.93 4.93 4.24 4.24"/><path d="m14.83 9.17 4.24-4.24"/><path d="m14.83 14.83 4.24 4.24"/><path d="m9.17 14.83-4.24 4.24"/><circle cx="12" cy="12" r="4"/></svg> تیکت‌ها (<span id="ticketsTotalCount" style="color:#22d3ee;"><?= count($tickets) ?></span>)
        </span>
        <span style="font-size:11px;color:#5a6b85;display:flex;align-items:center;gap:6px;">
            <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/></svg>
            به‌صورت خودکار به‌روز می‌شود
        </span>
    </div>

    <!-- Desktop table -->
    <div id="ticketsDesktopTable" class="table-container" style="border:1px solid rgba(34,211,238,0.06);">
        <table>
            <thead>
                <tr style="background:rgba(34,211,238,0.03);">
                    <th>#</th><th>کاربر</th><th>پیام</th><th>وضعیت</th><th>پاسخ‌دهنده</th><th>زمان</th><th>عملیات</th>
                </tr>
            </thead>
            <tbody id="ticketsBody"></tbody>
        </table>
    </div>

    <!-- Mobile cards -->
    <div id="ticketsMobileCards" style="display:none;flex-direction:column;gap:12px;"></div>
</div>
</div><!-- /#tab-tickets -->

<!-- ═══════════════════════════════════════════════════════════════════ -->
<!-- WITHDRAWALS TAB                                                   -->
<!-- ═══════════════════════════════════════════════════════════════════ -->
<div id="tab-withdrawals"<?= $canWithdrawals ? '' : ' style="display:none;"' ?>>
<!-- Open alert -->
<div id="withdrawalsOpenAlert" class="alert alert-warning" style="margin-bottom:16px;<?= $withdrawalOpenCount === 0 ? 'display:none;' : '' ?>">
    <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-3px;margin-left:6px;"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><line x1="12" x2="12" y1="9" y2="13"/><line x1="12" x2="12.01" y1="17" y2="17"/></svg> <span><b id="withdrawalsOpenCount"><?= $withdrawalOpenCount ?></b> درخواست برداشت در انتظار بررسی است.</span>
</div>

<!-- Withdrawals list -->
<div class="glass-card" style="padding:20px 24px;">
    <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px;">
        <span style="font-size:15px;font-weight:700;color:#e6f0ff;display:flex;align-items:center;gap:8px;">
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="16" height="20" x="4" y="2" rx="2"/><path d="M9 22v-4h6v4"/><path d="M8 6h.01"/><path d="M16 6h.01"/><path d="M12 6h.01"/><path d="M12 10h.01"/><path d="M12 14h.01"/><path d="M16 10h.01"/><path d="M16 14h.01"/><path d="M8 10h.01"/><path d="M8 14h.01"/></svg> درخواست‌های برداشت (<span id="withdrawalsTotalCount" style="color:#22d3ee;"><?= count($withdrawals) ?></span>)
        </span>
        <span style="font-size:11px;color:#5a6b85;display:flex;align-items:center;gap:6px;">
            <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/></svg>
            به‌صورت خودکار به‌روز می‌شود
        </span>
    </div>

    <!-- Desktop table -->
    <div id="withdrawalsDesktopTable" class="table-container" style="border:1px solid rgba(34,211,238,0.06);">
        <table>
            <thead>
                <tr style="background:rgba(34,211,238,0.03);">
                    <th>#</th><th>کاربر</th><th>نوع</th><th>وضعیت</th><th>پاسخ‌دهنده</th><th>زمان</th><th>عملیات</th>
                </tr>
            </thead>
            <tbody id="withdrawalsBody"></tbody>
        </table>
    </div>

    <!-- Mobile cards -->
    <div id="withdrawalsMobileCards" style="display:none;flex-direction:column;gap:12px;"></div>
</div>
</div><!-- /#tab-withdrawals -->

<script>
// ═══ Shared helpers ═══
function escapeHtml(s) {
    var d = document.createElement('div');
    d.textContent = s == null ? '' : String(s);
    return d.innerHTML;
}

function timeAgo(iso) {
    if (!iso) return '';
    var d = new Date(iso.replace(' ', 'T'));
    var diff = Date.now() - d.getTime();
    var m = Math.floor(diff / 60000);
    if (isNaN(m)) return iso;
    if (m < 1) return 'هم‌اکنون';
    if (m < 60) return m + ' دقیقه پیش';
    var h = Math.floor(m / 60);
    if (h < 24) return h + ' ساعت پیش';
    var days = Math.floor(h / 24);
    if (days < 30) return days + ' روز پیش';
    return d.toLocaleDateString('fa-IR');
}

var STATUS_BADGE = {
    open: { cls: 'badge-open', label: 'باز' },
    claimed: { cls: 'badge-claimed', label: 'در حال پاسخ' },
    answered: { cls: 'badge-answered', label: 'پاسخ داده شد' },
    closed: { cls: 'badge-closed', label: 'بسته شده' }
};

var WITHDRAWAL_STATUS_BADGE = {
    open:     { cls: 'badge-open',     label: 'باز' },
    claimed:  { cls: 'badge-claimed',  label: 'در حال بررسی' },
    answered: { cls: 'badge-answered', label: 'پاسخ داده شد' },
    closed:   { cls: 'badge-closed',   label: 'بسته شده' },
    approved: { cls: 'badge-approved', label: 'تأیید شده' },
    rejected: { cls: 'badge-rejected', label: 'رد شده' },
    paid:     { cls: 'badge-paid',     label: 'پرداخت شده' }
};

// ═══ Tab switching (pure client-side; no network round-trip) ═══
function showTab(name) {
    var tEl = document.getElementById('tab-tickets');
    var wEl = document.getElementById('tab-withdrawals');
    var tBtn = document.getElementById('tabBtnTickets');
    var wBtn = document.getElementById('tabBtnWithdrawals');
    if (tEl) tEl.style.display = (name === 'tickets') ? '' : 'none';
    if (wEl) wEl.style.display = (name === 'withdrawals') ? '' : 'none';
    // Toggle the active button styling.
    if (tBtn) {
        tBtn.classList.remove('btn-primary');
        tBtn.classList.add('btn-glass');
    }
    if (wBtn) {
        wBtn.classList.remove('btn-primary');
        wBtn.classList.add('btn-glass');
    }
    if (name === 'tickets' && tBtn) {
        tBtn.classList.remove('btn-glass');
        tBtn.classList.add('btn-primary');
    }
    if (name === 'withdrawals' && wBtn) {
        wBtn.classList.remove('btn-glass');
        wBtn.classList.add('btn-primary');
    }
    // Re-run the responsive table/card layout for the now-visible tab.
    showResponsive();
    // Update the URL hash so a refresh keeps the user on the same tab.
    try { history.replaceState(null, '', '#tab=' + encodeURIComponent(name)); } catch (e) {}
}

// ═══ Tickets: render + poll ═══
function renderTickets(data) {
    var tbody = document.getElementById('ticketsBody');
    var mobile = document.getElementById('ticketsMobileCards');
    var totalEl = document.getElementById('ticketsTotalCount');
    var openEl = document.getElementById('ticketsOpenCount');
    var alertEl = document.getElementById('ticketsOpenAlert');
    var badgeEl = document.getElementById('tabBadgeTickets');

    if (totalEl) totalEl.textContent = data.total.toLocaleString('fa-IR');
    if (openEl) openEl.textContent = data.open.toLocaleString('fa-IR');
    if (alertEl) {
        if (data.open > 0) {
            alertEl.style.display = 'flex';
            alertEl.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-3px;margin-left:6px;"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><line x1="12" x2="12" y1="9" y2="13"/><line x1="12" x2="12.01" y1="17" y2="17"/></svg> <span><b>' + data.open.toLocaleString('fa-IR') + '</b> تیکت باز منتظر پاسخ است.</span>';
        } else {
            alertEl.style.display = 'none';
        }
    }
    if (badgeEl) {
        if (data.open > 0) {
            badgeEl.style.display = '';
            badgeEl.textContent = data.open.toLocaleString('fa-IR');
        } else {
            badgeEl.style.display = 'none';
        }
    }

    tbody.innerHTML = '';
    mobile.innerHTML = '';

    if (data.rows.length === 0) {
        tbody.innerHTML = '<tr><td colspan="7" style="text-align:center;padding:40px;color:#5a6b85;">هیچ تیکتی وجود ندارد.</td></tr>';
        mobile.innerHTML = '<div style="padding:40px 0;text-align:center;color:#5a6b85;">هیچ تیکتی وجود ندارد.</div>';
        return;
    }

    data.rows.forEach(function(t) {
        var badge = STATUS_BADGE[t.status] || STATUS_BADGE.open;
        // Desktop row
        var tr = document.createElement('tr');
        tr.style.cursor = 'pointer';
        tr.onclick = function() { window.location.href = '?page=ticket_detail&id=' + t.id; };
        tr.innerHTML =
            '<td style="font-weight:700;color:#22d3ee;">#' + t.id + '</td>' +
            '<td><div style="font-weight:600;color:#e6f0ff;">' + escapeHtml(t.user_name) + '</div><div style="font-size:11px;color:#5a6b85;">' + escapeHtml(t.user_id) + '</div></td>' +
            '<td style="max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9fb0c9;">' + escapeHtml(t.question) + (t.full_q ? '...' : '') + '</td>' +
            '<td><span class="badge ' + badge.cls + '">' + badge.label + '</span></td>' +
            '<td style="color:#9fb0c9;">' + escapeHtml(t.admin_name || '—') + '</td>' +
            '<td style="font-size:11px;color:#5a6b85;">' + timeAgo(t.time) + '</td>' +
            '<td><a href="?page=ticket_detail&id=' + t.id + '" class="btn btn-glass btn-xs" onclick="event.stopPropagation();" style="display:inline-flex;align-items:center;gap:6px;"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg> مشاهده</a></td>';
        tbody.appendChild(tr);

        // Mobile card
        var card = document.createElement('a');
        card.href = '?page=ticket_detail&id=' + t.id;
        card.style.cssText = 'display:block;width:100%;padding:16px;border-radius:14px;background:rgba(255,255,255,0.03);border:1px solid rgba(34,211,238,0.1);text-decoration:none;color:inherit;transition:transform 0.2s;';
        card.innerHTML =
            '<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;">' +
                '<span style="font-size:13px;font-weight:700;color:#22d3ee;">#' + t.id + '</span>' +
                '<span class="badge ' + badge.cls + '">' + badge.label + '</span>' +
            '</div>' +
            '<div style="font-weight:600;color:#e6f0ff;margin-bottom:4px;">' + escapeHtml(t.user_name) + '</div>' +
            '<div style="overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;color:#9fb0c9;">' + escapeHtml(t.question) + (t.full_q ? '...' : '') + '</div>' +
            '<div style="font-size:11px;color:#5a6b85;margin-top:8px;">' + timeAgo(t.time) + '</div>';
        mobile.appendChild(card);
    });
}

function pollTickets() {
    fetch('?page=support&ajax=tickets_list')
        .then(function(r) { return r.json(); })
        .then(function(data) { renderTickets(data); })
        .catch(function() {});
}

// ═══ Withdrawals: render + poll ═══
function renderWithdrawals(data) {
    var tbody = document.getElementById('withdrawalsBody');
    var mobile = document.getElementById('withdrawalsMobileCards');
    var totalEl = document.getElementById('withdrawalsTotalCount');
    var openEl = document.getElementById('withdrawalsOpenCount');
    var alertEl = document.getElementById('withdrawalsOpenAlert');
    var badgeEl = document.getElementById('tabBadgeWithdrawals');

    if (totalEl) totalEl.textContent = data.total.toLocaleString('fa-IR');
    if (openEl) openEl.textContent = data.open.toLocaleString('fa-IR');
    if (alertEl) {
        if (data.open > 0) {
            alertEl.style.display = 'flex';
            alertEl.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-3px;margin-left:6px;"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><line x1="12" x2="12" y1="9" y2="13"/><line x1="12" x2="12.01" y1="17" y2="17"/></svg> <span><b>' + data.open.toLocaleString('fa-IR') + '</b> درخواست برداشت در انتظار بررسی است.</span>';
        } else {
            alertEl.style.display = 'none';
        }
    }
    if (badgeEl) {
        if (data.open > 0) {
            badgeEl.style.display = '';
            badgeEl.textContent = data.open.toLocaleString('fa-IR');
        } else {
            badgeEl.style.display = 'none';
        }
    }

    tbody.innerHTML = '';
    mobile.innerHTML = '';

    if (data.rows.length === 0) {
        tbody.innerHTML = '<tr><td colspan="7" style="text-align:center;padding:40px;color:#5a6b85;">هیچ درخواست برداشتی وجود ندارد.</td></tr>';
        mobile.innerHTML = '<div style="padding:40px 0;text-align:center;color:#5a6b85;">هیچ درخواست برداشتی وجود ندارد.</div>';
        return;
    }

    data.rows.forEach(function(w) {
        var badge = WITHDRAWAL_STATUS_BADGE[w.status] || WITHDRAWAL_STATUS_BADGE.open;
        // Desktop row
        var tr = document.createElement('tr');
        tr.style.cursor = 'pointer';
        tr.onclick = function() { window.location.href = '?page=withdrawal_detail&id=' + w.id; };
        tr.innerHTML =
            '<td style="font-weight:700;color:#22d3ee;">#' + w.id + '</td>' +
            '<td><div style="font-weight:600;color:#e6f0ff;">' + escapeHtml(w.user_id) + '</div>' +
                (w.amount > 0 ? '<div style="font-size:11px;color:#5a6b85;">' + w.amount.toLocaleString('fa-IR') + ' تومان</div>' : '') +
            '</td>' +
            '<td><span style="color:#9fb0c9;">' + escapeHtml(w.type_label) + '</span></td>' +
            '<td><span class="badge ' + badge.cls + '">' + badge.label + '</span></td>' +
            '<td style="color:#9fb0c9;">' + escapeHtml(w.admin_name || '—') + '</td>' +
            '<td style="font-size:11px;color:#5a6b85;">' + timeAgo(w.question_time) + '</td>' +
            '<td><a href="?page=withdrawal_detail&id=' + w.id + '" class="btn btn-glass btn-xs" onclick="event.stopPropagation();" style="display:inline-flex;align-items:center;gap:6px;"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg> مشاهده</a></td>';
        tbody.appendChild(tr);

        // Mobile card
        var card = document.createElement('a');
        card.href = '?page=withdrawal_detail&id=' + w.id;
        card.style.cssText = 'display:block;width:100%;padding:16px;border-radius:14px;background:rgba(255,255,255,0.03);border:1px solid rgba(34,211,238,0.1);text-decoration:none;color:inherit;transition:transform 0.2s;';
        card.innerHTML =
            '<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;">' +
                '<span style="font-size:13px;font-weight:700;color:#22d3ee;">#' + w.id + ' (' + escapeHtml(w.type_label) + ')</span>' +
                '<span class="badge ' + badge.cls + '">' + badge.label + '</span>' +
            '</div>' +
            '<div style="font-weight:600;color:#e6f0ff;margin-bottom:4px;">کاربر: ' + escapeHtml(w.user_id) + '</div>' +
            (w.amount > 0 ? '<div style="font-size:12px;color:#9fb0c9;">' + w.amount.toLocaleString('fa-IR') + ' تومان</div>' : '') +
            '<div style="font-size:11px;color:#5a6b85;margin-top:8px;">' + timeAgo(w.question_time) + '</div>';
        mobile.appendChild(card);
    });
}

function pollWithdrawals() {
    fetch('?page=support&ajax=withdrawals_list')
        .then(function(r) { return r.json(); })
        .then(function(data) { renderWithdrawals(data); })
        .catch(function() {});
}

// ═══ Responsive table/card layout for the currently-visible tab ═══
function showResponsive() {
    var dt, mc;
    var tEl = document.getElementById('tab-tickets');
    var wEl = document.getElementById('tab-withdrawals');
    var ticketsVisible = tEl && tEl.style.display !== 'none';
    var withdrawalsVisible = wEl && wEl.style.display !== 'none';
    if (ticketsVisible) {
        dt = document.getElementById('ticketsDesktopTable');
        mc = document.getElementById('ticketsMobileCards');
    } else if (withdrawalsVisible) {
        dt = document.getElementById('withdrawalsDesktopTable');
        mc = document.getElementById('withdrawalsMobileCards');
    } else {
        return;
    }
    if (window.innerWidth < 768) {
        if (dt) dt.style.display = 'none';
        if (mc) mc.style.display = 'flex';
    } else {
        if (dt) dt.style.display = 'block';
        if (mc) mc.style.display = 'none';
    }
}

// ═══ Boot ═══
(function() {
    // Pick the initial tab: URL hash > ?tab= > default 'tickets'.
    var initial = '<?= e($tab) ?>';
    try {
        var h = (window.location.hash || '').match(/tab=([a-z]+)/);
        if (h && (h[1] === 'tickets' || h[1] === 'withdrawals')) initial = h[1];
    } catch (e) {}
    showTab(initial);

    // Start independent polling loops for both tabs (so a hidden tab still
    // refreshes its data while the user is looking at the other one).
    var canTickets = <?= $canTickets ? 'true' : 'false' ?>;
    var canWithdrawals = <?= $canWithdrawals ? 'true' : 'false' ?>;
    if (canTickets) {
        pollTickets();
        setInterval(pollTickets, 5000);
    }
    if (canWithdrawals) {
        pollWithdrawals();
        setInterval(pollWithdrawals, 5000);
    }

    window.addEventListener('resize', showResponsive);
})();
</script>

<?php require __DIR__ . '/layout_bottom.php'; ?>
