<?php
require_once 'config.php';

function e($v){ return htmlspecialchars((string)$v); }

function money($v, $c='EUR'){
    return number_format((float)$v, 2) . ' ' . e($c);
}

function badge($status){
    $s = strtolower((string)$status);
    if($s === 'paid') return '<span class="badge paid">PAID</span>';
    if($s === 'created') return '<span class="badge created">CREATED</span>';
    if($s === 'declined' || $s === 'failed') return '<span class="badge declined">DECLINED</span>';
    if($s === 'review') return '<span class="badge review">REVIEW</span>';
    return '<span class="badge neutral">'.e(strtoupper($status ?: 'UNKNOWN')).'</span>';
}

function cardDisplay($p){
    $brand = strtoupper($p['card_brand'] ?? 'CARD');
    $first6 = $p['card_first6'] ?? '';
    $last4 = $p['card_last4'] ?? '';

    if ($first6 && $last4) return $brand . ' ' . $first6 . '******' . $last4;
    if ($last4) return $brand . ' ****' . $last4;
    if (!empty($p['network_reference'])) return ($brand ?: 'CARD') . ' / Network Ref: ' . $p['network_reference'];
    return 'Not returned by processor';
}

$status = $_GET['status'] ?? 'all';
$q = trim($_GET['q'] ?? '');
$dateFrom = trim($_GET['from'] ?? '');
$dateTo = trim($_GET['to'] ?? '');

$where = [];
$params = [];

if ($status !== 'all') {
    if ($status === 'declined') {
        $where[] = "status IN ('declined','failed')";
    } else {
        $where[] = "status = :status";
        $params[':status'] = $status;
    }
}

if ($q !== '') {
    $where[] = "(
        id LIKE :q OR
        telegram_id LIKE :q OR
        chat_id LIKE :q OR
        paypal_order_id LIKE :q OR
        capture_id LIKE :q OR
        card_last4 LIKE :q OR
        card_first6 LIKE :q OR
        network_reference LIKE :q
    )";
    $params[':q'] = '%' . $q . '%';
}

if ($dateFrom !== '') {
    $where[] = "created_at >= :date_from";
    $params[':date_from'] = $dateFrom . ' 00:00:00';
}

if ($dateTo !== '') {
    $where[] = "created_at <= :date_to";
    $params[':date_to'] = $dateTo . ' 23:59:59';
}

$whereSql = $where ? ('WHERE ' . implode(' AND ', $where)) : '';

try {
    $stats = [
        'total' => (int)$pdo->query("SELECT COUNT(*) FROM payment_requests")->fetchColumn(),
        'paid' => (int)$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE status='paid'")->fetchColumn(),
        'created' => (int)$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE status='created'")->fetchColumn(),
        'declined' => (int)$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE status IN ('declined','failed')")->fetchColumn(),
        'paid_volume' => (float)$pdo->query("SELECT COALESCE(SUM(amount),0) FROM payment_requests WHERE status='paid'")->fetchColumn(),
        'today_volume' => (float)$pdo->query("SELECT COALESCE(SUM(amount),0) FROM payment_requests WHERE status='paid' AND DATE(paid_at)=CURDATE()")->fetchColumn(),
    ];

    $stmt = $pdo->prepare("
        SELECT *
        FROM payment_requests
        $whereSql
        ORDER BY id DESC
        LIMIT 250
    ");
    $stmt->execute($params);
    $payments = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $filteredTotal = count($payments);

} catch(Throwable $ex){
    die("DB Error: " . e($ex->getMessage()));
}

function activeTab($current, $target){
    return $current === $target ? 'active' : '';
}

$baseUrl = 'admin_payments.php';
?>
<?php
try{
$rf_today=$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE DATE(created_at)=CURDATE()")->fetchColumn();
$rf_paid=$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE status IN ('PAID','COMPLETED')")->fetchColumn();
$rf_pending=$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE status IN ('CREATED','PENDING','REVIEW')")->fetchColumn();
$rf_payout=$pdo->query("SELECT COUNT(*) FROM payment_requests WHERE status='PAID_OUT'")->fetchColumn();
}catch(Exception $e){
$rf_today=0;$rf_paid=0;$rf_pending=0;$rf_payout=0;
}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
<title>RumboFacil Merchant Dashboard</title>
<style>
*{box-sizing:border-box}
body{
    margin:0;
    font-family:Inter,Arial,Helvetica,sans-serif;
    background:#eef3f9;
    color:#0f172a;
}
.topbar{
    position:sticky;
    top:0;
    z-index:20;
    background:rgba(8,20,43,.96);
    backdrop-filter:blur(14px);
    color:#fff;
    padding:14px 14px;
    box-shadow:0 10px 30px rgba(2,6,23,.18);
}
.topbar-inner{
    max-width:1180px;
    margin:0 auto;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
}
.brand{
    display:flex;
    align-items:center;
    gap:12px;
}
.logo{
    width:44px;
    height:44px;
    border-radius:15px;
    background:linear-gradient(135deg,#38ef7d,#11998e);
    display:flex;
    align-items:center;
    justify-content:center;
    font-weight:900;
    color:#fff;
    box-shadow:0 10px 25px rgba(17,153,142,.35);
}
.brand-title{
    font-size:16px;
    font-weight:900;
}
.brand-sub{
    color:#cbd5e1;
    font-size:11px;
    margin-top:2px;
}
.top-actions{
    display:flex;
    gap:8px;
    align-items:center;
}
.pill{
    background:rgba(255,255,255,.08);
    border:1px solid rgba(255,255,255,.13);
    color:#e2e8f0;
    padding:9px 10px;
    border-radius:999px;
    font-size:11px;
    font-weight:800;
    text-decoration:none;
    white-space:nowrap;
}
.hero{
    background:linear-gradient(135deg,#07182f,#0b78bd 55%,#16a34a);
    color:#fff;
    padding:26px 16px 72px;
    border-bottom-left-radius:34px;
    border-bottom-right-radius:34px;
}
.hero-inner{
    max-width:1180px;
    margin:0 auto;
}
.hero h1{
    margin:0;
    font-size:28px;
    letter-spacing:-.5px;
}
.hero p{
    margin:8px 0 0;
    color:#dbeafe;
    line-height:1.45;
    font-size:13px;
}
.wrap{
    max-width:1180px;
    margin:-52px auto 30px;
    padding:0 14px;
}
.stats{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:12px;
}
.stat{
    background:#fff;
    border:1px solid rgba(15,23,42,.06);
    border-radius:22px;
    padding:16px;
    box-shadow:0 12px 35px rgba(15,23,42,.08);
}
.stat-icon{
    width:38px;
    height:38px;
    border-radius:13px;
    display:flex;
    align-items:center;
    justify-content:center;
    margin-bottom:12px;
    font-weight:900;
}
.i-blue{background:#dbeafe;color:#1d4ed8}
.i-green{background:#dcfce7;color:#166534}
.i-yellow{background:#fef9c3;color:#854d0e}
.i-red{background:#fee2e2;color:#991b1b}
.i-dark{background:#e2e8f0;color:#334155}
.stat-label{
    color:#64748b;
    font-size:12px;
    font-weight:800;
}
.stat-value{
    font-size:24px;
    font-weight:950;
    margin-top:6px;
    letter-spacing:-.4px;
}
.panel{
    background:#fff;
    border-radius:24px;
    padding:14px;
    margin-top:14px;
    box-shadow:0 10px 32px rgba(15,23,42,.07);
    border:1px solid rgba(15,23,42,.06);
}
.tabs{
    display:flex;
    gap:8px;
    overflow-x:auto;
    padding-bottom:4px;
}
.tab{
    flex:0 0 auto;
    text-decoration:none;
    color:#334155;
    background:#f8fafc;
    border:1px solid #e2e8f0;
    border-radius:999px;
    padding:11px 14px;
    font-size:12px;
    font-weight:900;
}
.tab.active{
    background:#0b78bd;
    color:#fff;
    border-color:#0b78bd;
    box-shadow:0 8px 20px rgba(11,120,189,.22);
}
.filter-form{
    display:grid;
    grid-template-columns:1fr;
    gap:10px;
    margin-top:12px;
}
.input{
    width:100%;
    border:1px solid #dbe2ea;
    background:#f8fafc;
    border-radius:15px;
    padding:13px 14px;
    font-size:14px;
    outline:none;
}
.input:focus{
    border-color:#0b78bd;
    background:#fff;
    box-shadow:0 0 0 4px rgba(11,120,189,.10);
}
.filter-actions{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:10px;
}
.btn{
    border:none;
    border-radius:15px;
    padding:13px 14px;
    font-weight:900;
    cursor:pointer;
    text-decoration:none;
    text-align:center;
    font-size:14px;
}
.btn-primary{background:#0b78bd;color:#fff}
.btn-light{background:#e2e8f0;color:#334155}
.list-head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
    margin:18px 2px 12px;
}
.list-title{
    font-size:21px;
    font-weight:950;
}
.count{
    background:#e2e8f0;
    color:#334155;
    padding:7px 10px;
    border-radius:999px;
    font-size:12px;
    font-weight:900;
}
.payment-card{
    background:#fff;
    border-radius:23px;
    padding:16px;
    margin-bottom:13px;
    box-shadow:0 8px 24px rgba(15,23,42,.06);
    border:1px solid #e5e7eb;
}
.payment-card.declined-card{
    border-color:#fecaca;
    background:#fffafa;
}
.payment-card.paid-card{
    border-color:#bbf7d0;
}
.topline{
    display:flex;
    justify-content:space-between;
    align-items:flex-start;
    gap:10px;
}
.ref{
    font-size:18px;
    font-weight:950;
}
.meta-small{
    color:#64748b;
    font-size:11px;
    margin-top:4px;
}
.amount{
    font-size:30px;
    font-weight:950;
    margin-top:14px;
    letter-spacing:-.6px;
}
.badge{
    display:inline-flex;
    align-items:center;
    padding:8px 11px;
    border-radius:999px;
    font-size:11px;
    font-weight:950;
}
.paid{background:#dcfce7;color:#166534}
.created{background:#fef9c3;color:#854d0e}
.declined{background:#fee2e2;color:#991b1b}
.review{background:#e5e7eb;color:#334155}
.neutral{background:#e5e7eb;color:#374151}
.reason{
    background:#fee2e2;
    color:#7f1d1d;
    border:1px solid #fecaca;
    border-radius:15px;
    padding:12px;
    margin-top:14px;
    font-size:13px;
    line-height:1.45;
    font-weight:800;
}
.info-grid{
    display:grid;
    grid-template-columns:1fr;
    gap:0;
    margin-top:14px;
}
.row{
    display:flex;
    justify-content:space-between;
    gap:12px;
    padding:10px 0;
    border-bottom:1px solid #eef2f7;
    font-size:13px;
}
.row:last-child{border-bottom:0}
.k{
    color:#64748b;
    min-width:115px;
}
.v{
    font-weight:850;
    text-align:right;
    word-break:break-word;
    max-width:66%;
}
.mono{
    font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;
    font-size:12px;
}
.empty{
    background:#fff;
    border-radius:22px;
    padding:28px 16px;
    text-align:center;
    color:#64748b;
    box-shadow:0 8px 24px rgba(15,23,42,.06);
}
.footer-note{
    margin:18px 0 28px;
    color:#64748b;
    font-size:12px;
    line-height:1.5;
    text-align:center;
}
@media(min-width:760px){
    .stats{grid-template-columns:repeat(6,1fr)}
    .filter-form{grid-template-columns:2fr 1fr 1fr auto}
    .filter-actions{grid-template-columns:auto auto}
    .info-grid{grid-template-columns:1fr 1fr}
    .row{padding-right:12px}
}
@media(max-width:390px){
    .hero h1{font-size:24px}
    .amount{font-size:26px}
    .stat-value{font-size:21px}
}
</style>

<style>
.rf-head{background:linear-gradient(135deg,#07152f,#0d4d9b);padding:18px;border-radius:22px;color:#fff;margin:12px 0 18px}
.rf-head h1{margin:0;font-size:30px;line-height:1.1}
.rf-head p{margin:8px 0 0;opacity:.9;font-size:14px}
.rf-mini-nav{display:flex;gap:8px;overflow:auto;margin:0 0 18px;padding-bottom:4px}
.rf-mini-nav a{background:#fff;padding:10px 14px;border-radius:12px;text-decoration:none;color:#0a1733;font-weight:700;font-size:13px;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.08)}
.rf-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:18px}
.rf-stat{background:#fff;border-radius:18px;padding:16px;box-shadow:0 2px 10px rgba(0,0,0,.06)}
.rf-stat small{display:block;color:#6b7280;font-weight:700;margin-bottom:8px}
.rf-stat strong{font-size:30px;color:#08152e}
.rf-filter-box{background:#fff;padding:14px;border-radius:18px;margin-bottom:18px}
.rf-filter-box form{display:flex;flex-direction:column;gap:10px}
.rf-filter-box input,.rf-filter-box select{width:100%;padding:12px;border-radius:12px;border:1px solid #d7dde7;font-size:14px}
.rf-filter-box button{background:#0b74d1;color:#fff;border:none;border-radius:14px;padding:14px;font-weight:700}
</style>
</head>
<body>
<div class="rf-head">
<h1>FinoviaPay Merchant Dashboard</h1>
<p>Live merchant payment monitoring, payout tracking and transaction overview.</p>
</div>

<div class="rf-mini-nav">
<a href="#">Home</a>
<a href="#">Merchant Configuration</a>
<a href="#">Payout</a>
<a href="#">Merchant Keys</a>
</div>

<div class="rf-stats-grid">
<div class="rf-stat"><small>Today's Payments</small><strong><?php echo $rf_today; ?></strong></div>
<div class="rf-stat"><small>Completed Payments</small><strong><?php echo $rf_paid; ?></strong></div>
<div class="rf-stat"><small>Pending Payout</small><strong><?php echo $rf_pending; ?></strong></div>
<div class="rf-stat"><small>Paid Out</small><strong><?php echo $rf_payout; ?></strong></div>
</div>

<div class="rf-filter-box">
<form method="GET">
<select name="status">
<option value="">Latest Payments</option>
<option value="today">Today</option>
<option value="PAID">Paid</option>
<option value="DECLINED">Declined</option>
<option value="REVIEW">Review</option>
</select>

<input type="date" name="from_date">
<input type="date" name="to_date">

<button type="submit">Apply Filter</button>
</form>
</div>


<div class="topbar">
    <div class="topbar-inner">
        <div class="brand">
            <div class="logo">RF</div>
            <div>
                <div class="brand-title">RumboFacil Merchant</div>
                <div class="brand-sub">Live payments control center</div>
            </div>
        </div>
        <div class="top-actions">
            <a class="pill" href="admin_payments.php">Refresh</a>
        </div>
    </div>
</div>

<div class="hero">
    <div class="hero-inner">
        <h1>Payments Dashboard</h1>
        <p>Monitor approved, created and declined card payments with order, capture, processor and network details.</p>
    </div>
</div>

<div class="wrap">

    <div class="stats">
        <div class="stat">
            <div class="stat-icon i-dark">Σ</div>
            <div class="stat-label">Total</div>
            <div class="stat-value"><?php echo (int)$stats['total']; ?></div>
        </div>
        <div class="stat">
            <div class="stat-icon i-green">✓</div>
            <div class="stat-label">Paid</div>
            <div class="stat-value"><?php echo (int)$stats['paid']; ?></div>
        </div>
        <div class="stat">
            <div class="stat-icon i-yellow">•</div>
            <div class="stat-label">Created</div>
            <div class="stat-value"><?php echo (int)$stats['created']; ?></div>
        </div>
        <div class="stat">
            <div class="stat-icon i-red">×</div>
            <div class="stat-label">Declined</div>
            <div class="stat-value"><?php echo (int)$stats['declined']; ?></div>
        </div>
        <div class="stat">
            <div class="stat-icon i-blue">€</div>
            <div class="stat-label">Paid Volume</div>
            <div class="stat-value"><?php echo money($stats['paid_volume']); ?></div>
        </div>
        <div class="stat">
            <div class="stat-icon i-green">T</div>
            <div class="stat-label">Today Paid</div>
            <div class="stat-value"><?php echo money($stats['today_volume']); ?></div>
        </div>
    </div>

    <div class="panel">
        <div class="tabs">
            <a class="tab <?php echo activeTab($status,'all'); ?>" href="?status=all">All</a>
            <a class="tab <?php echo activeTab($status,'paid'); ?>" href="?status=paid">Paid</a>
            <a class="tab <?php echo activeTab($status,'created'); ?>" href="?status=created">Created</a>
            <a class="tab <?php echo activeTab($status,'declined'); ?>" href="?status=declined">Declined</a>
            <a class="tab <?php echo activeTab($status,'review'); ?>" href="?status=review">Review</a>
        </div>

        <form class="filter-form" method="GET" action="admin_payments.php">
            <input type="hidden" name="status" value="<?php echo e($status); ?>">
            <input class="input" type="text" name="q" value="<?php echo e($q); ?>" placeholder="Search ref ID, Telegram ID, Order ID, Capture ID, card last4...">
            <input class="input" type="date" name="from" value="<?php echo e($dateFrom); ?>">
            <input class="input" type="date" name="to" value="<?php echo e($dateTo); ?>">
            <div class="filter-actions">
                <button class="btn btn-primary" type="submit">Filter</button>
                <a class="btn btn-light" href="admin_payments.php">Clear</a>
            </div>
        </form>
    </div>

    <div class="list-head">
        <div class="list-title">Latest Payments</div>
        <div class="count"><?php echo (int)$filteredTotal; ?> shown</div>
    </div>

    <?php if(empty($payments)): ?>
        <div class="empty">
            <b>No payments found</b><br>
            Try clearing filters or refreshing the dashboard.
        </div>
    <?php endif; ?>

    <?php foreach($payments as $p): ?>
        <?php
            $ref = 'RF-PAY-' . $p['id'];
            $s = strtolower($p['status'] ?? '');
            $isDeclined = in_array($s, ['declined','failed']);
            $isPaid = $s === 'paid';
            $class = $isDeclined ? 'declined-card' : ($isPaid ? 'paid-card' : '');
        ?>
        <div class="payment-card <?php echo $class; ?>">
            <div class="topline">
                <div>
                    <div class="ref"><?php echo e($ref); ?></div>
                    <div class="meta-small">Created: <?php echo e($p['created_at'] ?? '-'); ?></div>
                </div>
                <?php echo badge($p['status'] ?? 'unknown'); ?>
            </div>

            <div class="amount"><?php echo money($p['amount'], $p['currency'] ?? 'EUR'); ?></div>

            <?php if($isDeclined && !empty($p['decline_reason'])): ?>
                <div class="reason">Reason: <?php echo e($p['decline_reason']); ?></div>
            <?php endif; ?>

            <div class="info-grid">
                <div class="row"><div class="k">Telegram ID</div><div class="v"><?php echo e($p['telegram_id'] ?? '-'); ?></div></div>
                <div class="row"><div class="k">Method</div><div class="v"><?php echo e($p['method'] ?? '-'); ?></div></div>

                <div class="row"><div class="k">Order ID</div><div class="v mono"><?php echo e($p['paypal_order_id'] ?? '-'); ?></div></div>
                <div class="row"><div class="k">Capture ID</div><div class="v mono"><?php echo e($p['capture_id'] ?? '-'); ?></div></div>

                <div class="row"><div class="k">Card</div><div class="v mono"><?php echo e(cardDisplay($p)); ?></div></div>
                <div class="row"><div class="k">Network Ref</div><div class="v mono"><?php echo e($p['network_reference'] ?? '-'); ?></div></div>

                <div class="row"><div class="k">Processor</div><div class="v mono"><?php echo e($p['processor_code'] ?? '-'); ?></div></div>
                <div class="row"><div class="k">CVV / AVS</div><div class="v mono"><?php echo e(($p['cvv_code'] ?? '-') . ' / ' . ($p['avs_code'] ?? '-')); ?></div></div>

                <div class="row"><div class="k">Paid At</div><div class="v"><?php echo e($p['paid_at'] ?? '-'); ?></div></div>
                <div class="row"><div class="k">Chat ID</div><div class="v"><?php echo e($p['chat_id'] ?? '-'); ?></div></div>
            </div>
        </div>
    <?php endforeach; ?>

    <div class="footer-note">
        Full card numbers and CVV are never stored. This dashboard shows only safe payment metadata returned/stored for verification.
    </div>

</div>

</body>
</html>
