<?php
session_start();
require_once '../inc/functions.php';
check404();
securityCheck();

// Только админы и модераторы
$user = getUserById($_SESSION['user_id'] ?? 0);
if (!$user || ($user['role'] !== 'admin' && $user['role'] !== 'moderator')) {
    header('Location: ../login.php');
    exit;
}

$action = $_GET['action'] ?? 'list';
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
if ($page < 1) $page = 1;
$statusFilter = $_GET['status'] ?? null;

// Обработка ответа от поддержки
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['reply'])) {
    $ticketId = (int)$_POST['ticket_id'];
    $message = trim($_POST['message'] ?? '');
    $ticket = getTicketById($ticketId);
    if ($ticket && $ticket['ticket']['status'] === 'open') {
        $result = addTicketMessage($ticketId, $user['id'], $message, true);
        if ($result['success']) {
            header('Location: support.php?action=view&id=' . $ticketId);
            exit;
        } else {
            $error = $result['message'];
        }
    } else {
        $error = 'Тикет не найден или закрыт.';
    }
}

// Обработка закрытия тикета
if (isset($_GET['close']) && isset($_GET['id'])) {
    $ticketId = (int)$_GET['id'];
    $result = closeTicket($ticketId, $user['id']);
    if ($result['success']) {
        header('Location: support.php?action=view&id=' . $ticketId);
        exit;
    } else {
        $error = $result['message'];
    }
}

require_once '../inc/header.php'; // предположим, есть отдельный хедер для админки или используем обычный
?>

<span class="ttl"><b>Управление обращениями</b></span>
<div class="clb"></div>
<div class="hr"></div>

<?php if ($action === 'list'): ?>
    <div style="margin-bottom:10px;">
        <a href="?status=open" class="btn">Открытые</a>
        <a href="?status=closed" class="btn">Закрытые</a>
        <a href="?" class="btn">Все</a>
    </div>

    <?php
    $tickets = getAllTickets($statusFilter, $page, 15);
    $total = countAllTickets($statusFilter);
    $maxPages = ceil($total / 15);
    ?>

    <table class="admin-table" style="width:100%; border-collapse:collapse;">
        <tr>
            <th>ID</th><th>Пользователь</th><th>Тема</th><th>Статус</th><th>Обновлён</th><th>Действия</th>
        </tr>
        <?php foreach ($tickets as $t): 
            $unreadForStaff = false;
            if ($t['status'] == 'open') {
                $stmt = $pdo->prepare("SELECT COUNT(*) FROM support_messages WHERE ticket_id = ? AND is_staff = 0 AND created_at > IFNULL(?, '1970-01-01')");
                $stmt->execute([$t['id'], $t['staff_last_read_at']]);
                $unreadForStaff = $stmt->fetchColumn() > 0;
            }
        ?>
        <tr style="background:<?= $unreadForStaff ? '#ffd' : '#fff' ?>;">
            <td><?= $t['id'] ?></td>
            <td><a href="../profile.php?id=<?= $t['user_id'] ?>"><?= htmlspecialchars($t['username']) ?></a></td>
            <td><?= htmlspecialchars($t['subject']) ?></td>
            <td><?= $t['status'] == 'open' ? 'Открыт' : 'Закрыт' ?></td>
            <td><?= date('d.m.Y H:i', strtotime($t['updated_at'])) ?></td>
            <td>
                <a href="support.php?action=view&id=<?= $t['id'] ?>">Просмотр</a>
                <?php if ($unreadForStaff): ?> <span style="color:red;">+1</span> <?php endif; ?>
            </td>
        </tr>
        <?php endforeach; ?>
    </table>

    <div class="pagination">
        Страницы:
        <?php for ($i = 1; $i <= $maxPages; $i++): ?>
            <?php if ($i == $page): ?>
                <span><?= $i ?></span>
            <?php else: ?>
                <a href="?page=<?= $i ?>&status=<?= $statusFilter ?>"><?= $i ?></a>
            <?php endif; ?>
        <?php endfor; ?>
    </div>

<?php elseif ($action === 'view' && isset($_GET['id'])):
    $ticketId = (int)$_GET['id'];
    $ticketData = getTicketById($ticketId);
    if (!$ticketData):
        echo '<div class="error">Тикет не найден.</div>';
    else:
        $ticket = $ticketData['ticket'];
        $messages = $ticketData['messages'];

        // Помечаем как прочитанное персоналом
        markTicketAsReadByStaff($ticketId);
?>
        <div style="margin-bottom:10px;">
            <a href="support.php" class="btn">← Назад к списку</a>
            <?php if ($ticket['status'] === 'open'): ?>
                <a href="support.php?close=1&id=<?= $ticketId ?>" class="btn" onclick="return confirm('Закрыть тикет?')">🔒 Закрыть тикет</a>
            <?php else: ?>
                <span class="btn disabled">Тикет закрыт</span>
            <?php endif; ?>
        </div>

        <div style="background:#eef; padding:10px;">
            <strong>Пользователь:</strong> <a href="../profile.php?id=<?= $ticket['user_id'] ?>"><?= htmlspecialchars($ticketData['messages'][0]['username'] ?? '') ?></a><br>
            <strong>Тема:</strong> <?= htmlspecialchars($ticket['subject']) ?><br>
            <strong>Статус:</strong> <?= $ticket['status']=='open'?'Открыт':'Закрыт' ?><br>
            <strong>Создан:</strong> <?= date('d.m.Y H:i', strtotime($ticket['created_at'])) ?><br>
            <strong>Последнее обновление:</strong> <?= date('d.m.Y H:i', strtotime($ticket['updated_at'])) ?>
        </div>

        <div style="margin-top:20px;">
            <?php foreach ($messages as $msg): 
                $isStaff = $msg['is_staff'];
                $bg = $isStaff ? '#e0ffe0' : '#ffffff';
                $align = $isStaff ? 'left' : 'right';
            ?>
                <div style="background:<?= $bg ?>; padding:10px; margin-bottom:5px; border:1px solid #ccc;">
                    <div style="display:flex; justify-content:space-between;">
                        <span><strong><?= $isStaff ? 'Служба поддержки' : htmlspecialchars($msg['username'] ?? 'Пользователь') ?></strong></span>
                        <span class="small"><?= date('d.m.Y H:i', strtotime($msg['created_at'])) ?></span>
                    </div>
                    <div style="margin-top:5px; white-space:pre-wrap;"><?= htmlspecialchars($msg['message']) ?></div>
                </div>
            <?php endforeach; ?>
        </div>

        <?php if ($ticket['status'] === 'open'): ?>
            <form method="post" style="margin-top:20px;">
                <input type="hidden" name="ticket_id" value="<?= $ticketId ?>">
                <label>Ответ поддержки:</label><br>
                <textarea name="message" rows="3" style="width:100%;" required></textarea><br>
                <button type="submit" name="reply" class="btn">Отправить ответ</button>
            </form>
        <?php endif; ?>

    <?php endif; ?>

<?php endif; ?>

<?php require_once '../inc/foot.php'; ?>