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

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

$botToken = "8367895377:AAGLCU-UwilSIlsfZgh_TjTTAdryK0uu5Xw";
$agentId   = (int)$_SESSION['agent_id'];
$ticketDbId = isset($_GET['id']) ? (int)$_GET['id'] : 0;

if ($ticketDbId <= 0) {
    die("Invalid ticket ID.");
}

function sendTelegramMessage($chatId, $message, $botToken)
{
    if (empty($chatId) || empty($botToken) || $botToken === 'YOUR_TELEGRAM_BOT_TOKEN_HERE') {
        return false;
    }

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

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

    $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);
    $response = curl_exec($ch);
    $error    = curl_error($ch);
    curl_close($ch);

    if ($error) {
        error_log("Telegram ticket reply error: " . $error);
        return false;
    }

    return $response;
}

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

$stmt = $pdo->prepare("SELECT * FROM support_tickets WHERE id = :id LIMIT 1");
$stmt->execute([':id' => $ticketDbId]);
$ticket = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$ticket) {
    die("Ticket not found.");
}

$ticketId = $ticket['ticket_id'] ?? ('TICKET-' . $ticketDbId);
$successMessage = '';
$errorMessage = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['save_reply'])) {
        $replyMessage = trim($_POST['reply_message'] ?? '');
        $newStatus    = trim($_POST['ticket_status'] ?? ($ticket['status'] ?? 'Open'));

        if ($replyMessage === '') {
            $errorMessage = 'Please enter a reply message before sending.';
        } else {
            try {
                $msgStmt = $pdo->prepare("INSERT INTO ticket_messages (ticket_id, sender, message, created_at) VALUES (:ticket_id, 'agent', :message, NOW())");
                $msgStmt->execute([
                    ':ticket_id' => $ticketId,
                    ':message' => $replyMessage
                ]);

                $updStmt = $pdo->prepare("UPDATE support_tickets SET status = :status WHERE id = :id");
                $updStmt->execute([
                    ':status' => $newStatus,
                    ':id' => $ticketDbId
                ]);

                $customerName = trim($ticket['customer_name'] ?? 'Customer');
                $telegramId   = $ticket['telegram_id'] ?? '';
                $department   = trim($ticket['department'] ?? 'Support Department');

                $telegramMessage  = "FinoviaPay Customer Service | {$department}\n\n";
                $telegramMessage .= "Ticket ID: {$ticketId}\n\n";
                $telegramMessage .= "Dear {$customerName},\n\n";
                $telegramMessage .= "We would like to inform you that your support ticket has been reviewed by our support team.\n\n";
                $telegramMessage .= "Response from FinoviaPay Support Officer:\n\n";
                $telegramMessage .= $replyMessage . "\n\n";
                $telegramMessage .= "Current Ticket Status: {$newStatus}\n\n";
                $telegramMessage .= "If you require any further assistance regarding this matter, you may reply to this message or contact FinoviaPay Customer Support again at any time.\n\n";
                $telegramMessage .= "Thank you for choosing FinoviaPay.\n\n";
                $telegramMessage .= "FinoviaPay\nWorldwide Digital Internet Banking";

                sendTelegramMessage($telegramId, $telegramMessage, $botToken);

                header("Location: ticket_detail.php?id=" . $ticketDbId . "&success=1");
                exit;
            } catch (Throwable $e) {
                $errorMessage = 'Unable to save ticket reply. Please try again.';
                error_log('Ticket detail reply error: ' . $e->getMessage());
            }
        }
    }

    if (isset($_POST['update_status_only'])) {
        $newStatus = trim($_POST['ticket_status'] ?? ($ticket['status'] ?? 'Open'));

        try {
            $updStmt = $pdo->prepare("UPDATE support_tickets SET status = :status WHERE id = :id");
            $updStmt->execute([
                ':status' => $newStatus,
                ':id' => $ticketDbId
            ]);

            header("Location: ticket_detail.php?id=" . $ticketDbId . "&status_updated=1");
            exit;
        } catch (Throwable $e) {
            $errorMessage = 'Unable to update ticket status.';
            error_log('Ticket status update error: ' . $e->getMessage());
        }
    }
}

$stmt = $pdo->prepare("SELECT * FROM support_tickets WHERE id = :id LIMIT 1");
$stmt->execute([':id' => $ticketDbId]);
$ticket = $stmt->fetch(PDO::FETCH_ASSOC);

$msgStmt = $pdo->prepare("SELECT * FROM ticket_messages WHERE ticket_id = :ticket_id ORDER BY id ASC");
$msgStmt->execute([':ticket_id' => $ticketId]);
$messages = $msgStmt->fetchAll(PDO::FETCH_ASSOC);

if (isset($_GET['success'])) {
    $successMessage = 'Ticket reply has been sent successfully.';
}
if (isset($_GET['status_updated'])) {
    $successMessage = 'Ticket status has been updated successfully.';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ticket Detail | FinoviaPay</title>
<style>
    *{box-sizing:border-box}
    body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#f3f6fb;color:#1f2937}
    .wrap{max-width:1100px;margin:0 auto;padding:14px}
    .topbar{background:#0f8f57;color:#fff;padding:16px;border-radius:14px;margin-bottom:14px}
    .topbar h1{margin:0;font-size:20px}
    .topbar p{margin:6px 0 0;font-size:13px;opacity:.95}
    .grid{display:grid;grid-template-columns:1.1fr .9fr;gap:14px}
    .card{background:#fff;border-radius:14px;padding:14px;box-shadow:0 4px 18px rgba(15,23,42,.06)}
    .card h2,.card h3{margin:0 0 12px 0;font-size:18px}
    .meta{display:grid;grid-template-columns:1fr 1fr;gap:10px}
    .meta-item{background:#f8fafc;border:1px solid #e5e7eb;border-radius:12px;padding:10px}
    .label{font-size:12px;color:#6b7280;margin-bottom:4px}
    .value{font-size:14px;font-weight:600;word-break:break-word}
    .desc{background:#f8fafc;border:1px solid #e5e7eb;border-radius:12px;padding:12px;font-size:14px;line-height:1.6;white-space:pre-wrap}
    .chat-box{background:#f8fafc;border:1px solid #e5e7eb;border-radius:12px;padding:12px;min-height:280px;max-height:480px;overflow:auto}
    .msg{max-width:86%;padding:10px 12px;border-radius:12px;margin-bottom:10px;clear:both;line-height:1.5;font-size:14px}
    .msg.customer,.msg.user{float:left;background:#e5e7eb;color:#111827}
    .msg.agent{float:right;background:#0f8f57;color:#fff}
    .msg.system{margin-left:auto;margin-right:auto;background:#eef4ff;color:#1e3a8a;float:none;text-align:center;border:1px solid #dbeafe}
    .clearfix::after{content:"";display:block;clear:both}
    textarea,input,select{width:100%;border:1px solid #d1d5db;border-radius:10px;padding:12px;font-size:14px;font-family:inherit}
    textarea{min-height:140px;resize:vertical}
    .actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
    button{border:none;background:#0f8f57;color:#fff;padding:12px 16px;border-radius:10px;font-size:14px;cursor:pointer}
    button.secondary{background:#475569}
    .notice{padding:12px;border-radius:10px;margin-bottom:12px;font-size:14px}
    .success{background:#ecfdf5;color:#166534;border:1px solid #bbf7d0}
    .error{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}
    .back-link{display:inline-block;margin-top:12px;color:#0f8f57;text-decoration:none;font-weight:700}
    @media (max-width: 860px){
        .grid{grid-template-columns:1fr}
        .meta{grid-template-columns:1fr}
        .wrap{padding:10px}
        .topbar h1{font-size:18px}
        .msg{max-width:92%}
    }
</style>
</head>
<body>
<div class="wrap">
    <div class="topbar">
        <h1>FinoviaPay Ticket Detail</h1>
        <p>Professional banking-style support ticket review and response panel.</p>
    </div>

    <?php if ($successMessage !== ''): ?>
        <div class="notice success"><?= h($successMessage) ?></div>
    <?php endif; ?>

    <?php if ($errorMessage !== ''): ?>
        <div class="notice error"><?= h($errorMessage) ?></div>
    <?php endif; ?>

    <div class="grid">
        <div class="card">
            <h2>Ticket Information</h2>
            <div class="meta">
                <div class="meta-item"><div class="label">Ticket ID</div><div class="value"><?= h($ticket['ticket_id'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Status</div><div class="value"><?= h($ticket['status'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Customer Name</div><div class="value"><?= h($ticket['customer_name'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Category</div><div class="value"><?= h($ticket['category'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Department</div><div class="value"><?= h($ticket['department'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Issue Type</div><div class="value"><?= h($ticket['issue_type'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Card Type</div><div class="value"><?= h($ticket['card_type'] ?? '') ?></div></div>
                <div class="meta-item"><div class="label">Created At</div><div class="value"><?= h($ticket['created_at'] ?? '') ?></div></div>
            </div>

            <h3 style="margin-top:14px;">Issue Description</h3>
            <div class="desc"><?= h($ticket['description'] ?? '') ?></div>

            <a class="back-link" href="dashboard.php">&larr; Back to Dashboard</a>
        </div>

        <div class="card">
            <h2>Reply to Ticket</h2>
            <form method="post">
                <label class="label">Ticket Status</label>
                <select name="ticket_status">
                    <?php
                    $statuses = ['Open','Under Review','Waiting for Customer','Resolved','Closed'];
                    $currentStatus = $ticket['status'] ?? 'Open';
                    foreach ($statuses as $status):
                    ?>
                        <option value="<?= h($status) ?>" <?= $currentStatus === $status ? 'selected' : '' ?>><?= h($status) ?></option>
                    <?php endforeach; ?>
                </select>

                <label class="label" style="margin-top:12px;display:block;">Reply Message</label>
                <textarea name="reply_message" placeholder="Enter your professional support response here..."></textarea>

                <div class="actions">
                    <button type="submit" name="save_reply">Send Reply</button>
                    <button type="submit" name="update_status_only" class="secondary">Update Status Only</button>
                </div>
            </form>
        </div>
    </div>

    <div class="card" style="margin-top:14px;">
        <h2>Ticket Conversation</h2>
        <div class="chat-box clearfix">
            <?php if (!$messages): ?>
                <div class="msg system">No ticket conversation has been recorded yet.</div>
            <?php else: ?>
                <?php foreach ($messages as $msg): ?>
                    <?php
                        $sender = strtolower((string)($msg['sender'] ?? 'system'));
                        $class = 'system';
                        if ($sender === 'customer' || $sender === 'user') $class = 'user';
                        if ($sender === 'agent') $class = 'agent';
                    ?>
                    <div class="msg <?= h($class) ?>">
                        <?= nl2br(h($msg['message'] ?? '')) ?>
                    </div>
                <?php endforeach; ?>
            <?php endif; ?>
        </div>
    </div>
</div>
</body>
</html>
