Your IP : 216.73.217.78


Current Path : /home/seto/888mirror.pm/admin/
Upload File :
Current File : /home/seto/888mirror.pm/admin/stats.php

<?php
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/helpers.php';

auth_check();

$db  = db();
$tab = $_GET['tab'] ?? 'site';

// Сброс статистики
$reset_msg = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['reset_stats'])) {
    $mode = $_POST['reset_mode'] ?? 'all';
    $tbl  = $_POST['reset_table'] ?? 'stats';
    $tbl  = in_array($tbl, ['stats','widget_stats']) ? $tbl : 'stats';
    if ($mode === 'older' && !empty($_POST['older_days'])) {
        $days   = max(1, (int)$_POST['older_days']);
        $cutoff = date('Y-m-d H:i:s', strtotime("-{$days} days"));
        $db->prepare("DELETE FROM $tbl WHERE created_at < ?")->execute([$cutoff]);
        $reset_msg = "Удалена статистика старше {$days} дней из таблицы «{$tbl}».";
    } else {
        $db->exec("DELETE FROM $tbl");
        $reset_msg = "Вся статистика сброшена из таблицы «{$tbl}».";
    }
}

// Общие фильтры
$filter_brand = (int)($_GET['brand_id'] ?? 0);
$filter_days  = (int)($_GET['days'] ?? 30);
$filter_days  = in_array($filter_days, [1,7,30,90,365]) ? $filter_days : 30;
$since        = date('Y-m-d H:i:s', strtotime("-{$filter_days} days"));
$brands_list  = $db->query("SELECT id, name FROM brands ORDER BY name")->fetchAll();
$where_brand  = $filter_brand ? "AND s.brand_id = $filter_brand" : '';

function ctr(int $imp, int $clk): string {
    if (!$imp) return '—';
    return round($clk / $imp * 100, 1) . '%';
}

// ── SITE TAB queries ────────────────────────────────────────
if ($tab === 'site') {
    $by_brand = $db->prepare("
        SELECT b.name,
            SUM(CASE WHEN s.event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN s.event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM stats s JOIN brands b ON b.id=s.brand_id
        WHERE s.created_at >= ? $where_brand
        GROUP BY s.brand_id ORDER BY clk DESC
    ");
    $by_brand->execute([$since]);
    $by_brand = $by_brand->fetchAll();

    $by_country = $db->prepare("
        SELECT s.country,
            SUM(CASE WHEN s.event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN s.event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM stats s WHERE s.created_at >= ? $where_brand
        AND s.country != '-' AND s.country != ''
        GROUP BY s.country ORDER BY imp DESC LIMIT 30
    ");
    $by_country->execute([$since]);
    $by_country = $by_country->fetchAll();

    $by_lang = $db->prepare("
        SELECT s.language,
            SUM(CASE WHEN s.event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN s.event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM stats s WHERE s.created_at >= ? $where_brand
        GROUP BY s.language ORDER BY imp DESC LIMIT 30
    ");
    $by_lang->execute([$since]);
    $by_lang = $by_lang->fetchAll();
}

// ── WIDGET TAB queries ──────────────────────────────────────
if ($tab === 'widget') {
    $w_summary = $db->prepare("
        SELECT
            SUM(CASE WHEN event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM widget_stats WHERE created_at >= ? $where_brand
    ");
    $w_summary->execute([$since]);
    $w_summary = $w_summary->fetch();

    $w_brands = $db->prepare("
        SELECT b.name,
            SUM(CASE WHEN s.event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN s.event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM widget_stats s JOIN brands b ON b.id=s.brand_id
        WHERE s.created_at >= ? $where_brand
        GROUP BY s.brand_id ORDER BY clk DESC
    ");
    $w_brands->execute([$since]);
    $w_brands = $w_brands->fetchAll();

    $w_country = $db->prepare("
        SELECT s.country,
            SUM(CASE WHEN s.event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN s.event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM widget_stats s WHERE s.created_at >= ? $where_brand
        AND s.country != '-' AND s.country != ''
        GROUP BY s.country ORDER BY imp DESC LIMIT 30
    ");
    $w_country->execute([$since]);
    $w_country = $w_country->fetchAll();

    $w_hosts = $db->prepare("
        SELECT ref_host,
            SUM(CASE WHEN event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM widget_stats WHERE created_at >= ? $where_brand AND ref_host != ''
        GROUP BY ref_host ORDER BY imp DESC LIMIT 20
    ");
    $w_hosts->execute([$since]);
    $w_hosts = $w_hosts->fetchAll();

    $w_layouts = $db->prepare("
        SELECT widget_layout,
            SUM(CASE WHEN event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM widget_stats WHERE created_at >= ? $where_brand AND widget_layout != ''
        GROUP BY widget_layout ORDER BY imp DESC
    ");
    $w_layouts->execute([$since]);
    $w_layouts = $w_layouts->fetchAll();

    $w_by_day = $db->prepare("
        SELECT DATE(created_at) as day,
            SUM(CASE WHEN event_type='impression' THEN 1 ELSE 0 END) as imp,
            SUM(CASE WHEN event_type='click'      THEN 1 ELSE 0 END) as clk
        FROM widget_stats WHERE created_at >= ? $where_brand
        GROUP BY DATE(created_at) ORDER BY day
    ");
    $w_by_day->execute([$since]);
    $w_by_day = $w_by_day->fetchAll();
}

// ── REDIRECTS TAB queries ────────────────────────────────────
$filter_country = preg_replace('/[^a-z]/', '', strtolower($_GET['country'] ?? ''));
$where_rc_brand   = $filter_brand   ? "AND rc.brand_id = $filter_brand" : '';
$where_rc_country = $filter_country ? "AND rc.country = " . $db->quote($filter_country) : '';

if ($tab === 'redirects') {
    $rc_summary = $db->prepare("
        SELECT COUNT(*) as total FROM redirect_clicks rc
        WHERE rc.created_at >= ? $where_rc_brand $where_rc_country
    ");
    $rc_summary->execute([$since]);
    $rc_total = (int)$rc_summary->fetchColumn();

    $rc_brands = $db->prepare("
        SELECT b.name, COUNT(*) as clk
        FROM redirect_clicks rc JOIN brands b ON b.id = rc.brand_id
        WHERE rc.created_at >= ? $where_rc_brand $where_rc_country
        GROUP BY rc.brand_id ORDER BY clk DESC LIMIT 20
    ");
    $rc_brands->execute([$since]);
    $rc_brands = $rc_brands->fetchAll();

    $rc_countries = $db->prepare("
        SELECT rc.country, COUNT(*) as clk
        FROM redirect_clicks rc
        WHERE rc.created_at >= ? AND rc.country != '-' $where_rc_brand $where_rc_country
        GROUP BY rc.country ORDER BY clk DESC LIMIT 30
    ");
    $rc_countries->execute([$since]);
    $rc_countries = $rc_countries->fetchAll();

    $rc_sources = $db->prepare("
        SELECT rc.source, COUNT(*) as clk
        FROM redirect_clicks rc
        WHERE rc.created_at >= ? AND rc.source != '' $where_rc_brand $where_rc_country
        GROUP BY rc.source ORDER BY clk DESC LIMIT 20
    ");
    $rc_sources->execute([$since]);
    $rc_sources = $rc_sources->fetchAll();

    $rc_by_day = $db->prepare("
        SELECT DATE(rc.created_at) as day, COUNT(*) as clk
        FROM redirect_clicks rc
        WHERE rc.created_at >= ? $where_rc_brand $where_rc_country
        GROUP BY DATE(rc.created_at) ORDER BY day
    ");
    $rc_by_day->execute([$since]);
    $rc_by_day = $rc_by_day->fetchAll();
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Статистика — Admin</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
</head>
<body>
<?= admin_nav('stats') ?>
<div class="container-fluid px-4">

<div class="d-flex align-items-center justify-content-between mb-3 flex-wrap gap-2">
    <h5 class="mb-0">Детальная статистика</h5>
    <button class="btn btn-outline-danger btn-sm" data-bs-toggle="modal" data-bs-target="#resetModal">
        <i class="bi bi-trash3 me-1"></i>Сбросить
    </button>
</div>

<?php if ($reset_msg): ?>
    <div class="alert alert-success py-2"><?= h($reset_msg) ?></div>
<?php endif ?>

<!-- Фильтры -->
<form class="row g-2 mb-3">
    <input type="hidden" name="tab" value="<?= h($tab) ?>">
    <div class="col-auto">
        <select name="brand_id" class="form-select form-select-sm">
            <option value="0">Все бренды</option>
            <?php foreach ($brands_list as $b): ?>
                <option value="<?= $b['id'] ?>" <?= $filter_brand===$b['id'] ? 'selected':'' ?>><?= h($b['name']) ?></option>
            <?php endforeach ?>
        </select>
    </div>
    <div class="col-auto">
        <select name="days" class="form-select form-select-sm">
            <?php foreach ([1=>'Сегодня',7=>'7 дней',30=>'30 дней',90=>'90 дней',365=>'Год'] as $d=>$l): ?>
                <option value="<?= $d ?>" <?= $filter_days===$d ? 'selected':'' ?>><?= $l ?></option>
            <?php endforeach ?>
        </select>
    </div>
    <div class="col-auto">
        <button type="submit" class="btn btn-primary btn-sm">Применить</button>
    </div>
</form>

<!-- Вкладки -->
<ul class="nav nav-tabs mb-4">
    <li class="nav-item">
        <a class="nav-link <?= $tab==='site' ? 'active':'' ?>"
           href="?tab=site&days=<?= $filter_days ?>&brand_id=<?= $filter_brand ?>">
           🌐 Основной сайт + Лендинги
        </a>
    </li>
    <li class="nav-item">
        <a class="nav-link <?= $tab==='widget' ? 'active':'' ?>"
           href="?tab=widget&days=<?= $filter_days ?>&brand_id=<?= $filter_brand ?>">
           🧩 Виджет
        </a>
    </li>
    <li class="nav-item">
        <a class="nav-link <?= $tab==='redirects' ? 'active':'' ?>"
           href="?tab=redirects&days=<?= $filter_days ?>&brand_id=<?= $filter_brand ?>">
           ↪ Redirects
        </a>
    </li>
</ul>

<?php if ($tab === 'site'): ?>
<!-- ══ ВКЛАДКА: ОСНОВНОЙ САЙТ ══════════════════════════════ -->
<div class="row g-4">
    <div class="col-md-4">
        <div class="card shadow-sm">
            <div class="card-header">По брендам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Бренд</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php foreach ($by_brand as $r): ?>
                        <tr><td><?= h($r['name']) ?></td><td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td></tr>
                    <?php endforeach ?>
                    <?php if (empty($by_brand)): ?>
                        <tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr>
                    <?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card shadow-sm">
            <div class="card-header">По странам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Страна</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php foreach ($by_country as $r): ?>
                        <tr>
                            <td><img src="https://flagicons.lipis.dev/flags/4x3/<?= h(strtolower($r['country'])) ?>.svg" width="18" height="13" class="me-1" style="border-radius:2px">
                            <?= h(country_name($r['country'])) ?></td>
                            <td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td>
                        </tr>
                    <?php endforeach ?>
                    <?php if (empty($by_country)): ?><tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr><?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card shadow-sm">
            <div class="card-header">По языкам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Язык</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php foreach ($by_lang as $r): ?>
                        <tr><td><?= h($r['language']) ?></td><td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td></tr>
                    <?php endforeach ?>
                    <?php if (empty($by_lang)): ?><tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr><?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<?php else: ?>
<!-- ══ ВКЛАДКА: ВИДЖЕТ ═════════════════════════════════════ -->

<!-- Сводка -->
<div class="row g-3 mb-4">
    <?php
    $w_imp = (int)($w_summary['imp'] ?? 0);
    $w_clk = (int)($w_summary['clk'] ?? 0);
    ?>
    <div class="col-sm-4">
        <div class="card text-center shadow-sm">
            <div class="card-body py-3">
                <div class="fs-3 fw-bold"><?= number_format($w_imp) ?></div>
                <div class="text-muted small">Показы</div>
            </div>
        </div>
    </div>
    <div class="col-sm-4">
        <div class="card text-center shadow-sm">
            <div class="card-body py-3">
                <div class="fs-3 fw-bold"><?= number_format($w_clk) ?></div>
                <div class="text-muted small">Клики</div>
            </div>
        </div>
    </div>
    <div class="col-sm-4">
        <div class="card text-center shadow-sm">
            <div class="card-body py-3">
                <div class="fs-3 fw-bold"><?= ctr($w_imp, $w_clk) ?></div>
                <div class="text-muted small">CTR</div>
            </div>
        </div>
    </div>
</div>

<!-- График по дням -->
<?php if (!empty($w_by_day)): ?>
<div class="card shadow-sm mb-4">
    <div class="card-header">По дням</div>
    <div class="card-body">
        <canvas id="wChart" height="80"></canvas>
    </div>
</div>
<?php endif ?>

<div class="row g-4">
    <!-- По брендам -->
    <div class="col-md-3">
        <div class="card shadow-sm">
            <div class="card-header">По брендам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Бренд</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php foreach ($w_brands as $r): ?>
                        <tr><td><?= h($r['name']) ?></td><td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td></tr>
                    <?php endforeach ?>
                    <?php if (empty($w_brands)): ?><tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr><?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <!-- По GEO -->
    <div class="col-md-3">
        <div class="card shadow-sm">
            <div class="card-header">По GEO</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Страна</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php foreach ($w_country as $r): ?>
                        <tr>
                            <td><img src="https://flagicons.lipis.dev/flags/4x3/<?= h(strtolower($r['country'])) ?>.svg" width="18" height="13" class="me-1" style="border-radius:2px">
                            <?= h(country_name($r['country'])) ?></td>
                            <td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td>
                        </tr>
                    <?php endforeach ?>
                    <?php if (empty($w_country)): ?><tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr><?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <!-- По хостам -->
    <div class="col-md-3">
        <div class="card shadow-sm">
            <div class="card-header">По хостам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Домен</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php foreach ($w_hosts as $r): ?>
                        <tr><td class="text-truncate" style="max-width:140px" title="<?= h($r['ref_host']) ?>"><?= h($r['ref_host']) ?></td>
                        <td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td></tr>
                    <?php endforeach ?>
                    <?php if (empty($w_hosts)): ?><tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr><?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <!-- По layout -->
    <div class="col-md-3">
        <div class="card shadow-sm">
            <div class="card-header">По layout</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Layout</th><th>Показы</th><th>Клики</th><th>CTR</th></tr></thead>
                    <tbody>
                    <?php
                    $layout_icons = ['table'=>'⊞','cards'=>'▦','ranked'=>'☰','liquid'=>'◈'];
                    foreach ($w_layouts as $r): ?>
                        <tr><td><?= $layout_icons[$r['widget_layout']] ?? '' ?> <?= h($r['widget_layout']) ?></td>
                        <td><?= $r['imp'] ?></td><td><?= $r['clk'] ?></td><td><?= ctr((int)$r['imp'],(int)$r['clk']) ?></td></tr>
                    <?php endforeach ?>
                    <?php if (empty($w_layouts)): ?><tr><td colspan="4" class="text-center text-muted py-3">Нет данных</td></tr><?php endif ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>
<?php endif ?>

</div><!-- /container -->

<!-- Модал сброса -->
<div class="modal fade" id="resetModal" tabindex="-1">
    <div class="modal-dialog modal-sm">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Сбросить статистику</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <form method="post">
                <div class="modal-body">
                    <div class="mb-3">
                        <label class="form-label small fw-semibold">Таблица</label>
                        <select name="reset_table" class="form-select form-select-sm mb-3">
                            <option value="stats">Основной сайт (stats)</option>
                            <option value="widget_stats" <?= $tab==='widget' ? 'selected':'' ?>>Виджет (widget_stats)</option>
                        </select>
                        <div class="form-check mb-2">
                            <input class="form-check-input" type="radio" name="reset_mode" id="rm_all" value="all" checked>
                            <label class="form-check-label" for="rm_all">Удалить всю статистику</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="radio" name="reset_mode" id="rm_older" value="older">
                            <label class="form-check-label" for="rm_older">Удалить старше</label>
                        </div>
                        <div class="input-group input-group-sm mt-2 ms-4" style="width:140px">
                            <input type="number" name="older_days" class="form-control" value="90" min="1">
                            <span class="input-group-text">дней</span>
                        </div>
                    </div>
                    <div class="text-danger small">Действие необратимо.</div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Отмена</button>
                    <button type="submit" name="reset_stats" value="1" class="btn btn-danger btn-sm"
                            onclick="return confirm('Удалить статистику? Нельзя отменить.')">Удалить</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<?php if ($tab === 'widget' && !empty($w_by_day)): ?>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script>
(function(){
    var days  = <?= json_encode(array_column($w_by_day, 'day')) ?>;
    var imps  = <?= json_encode(array_map('intval', array_column($w_by_day, 'imp'))) ?>;
    var clks  = <?= json_encode(array_map('intval', array_column($w_by_day, 'clk'))) ?>;
    var ctx   = document.getElementById('wChart').getContext('2d');
    new Chart(ctx, {
        type: 'bar',
        data: {
            labels: days,
            datasets: [
                { label: 'Показы', data: imps, backgroundColor: 'rgba(59,130,246,0.6)', borderRadius: 4 },
                { label: 'Клики',  data: clks, backgroundColor: 'rgba(239,68,68,0.7)',  borderRadius: 4 }
            ]
        },
        options: { responsive: true, plugins: { legend: { position: 'top' } }, scales: { x: { grid: { display: false } } } }
    });
})();
</script>
<?php endif ?>

<?php if ($tab === 'redirects'): ?>
<!-- ══ ВКЛАДКА: REDIRECTS ══════════════════════════════════ -->
<div class="row g-3 mb-4">
    <div class="col-12">
        <div class="card shadow-sm">
            <div class="card-body d-flex align-items-center gap-4">
                <div><span class="fs-3 fw-bold"><?= number_format($rc_total) ?></span><br><span class="text-muted small">Редиректов за <?= $filter_days ?> дн.</span></div>
                <?php if ($filter_country): ?>
                <div class="ms-3">
                    <img src="https://flagicons.lipis.dev/flags/4x3/<?= h($filter_country) ?>.svg" width="24">
                    <strong><?= h(country_name($filter_country)) ?></strong>
                    <a href="?tab=redirects&days=<?= $filter_days ?>" class="ms-2 btn btn-sm btn-outline-secondary">✕ Убрать фильтр</a>
                </div>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>
<div class="row g-3 mb-4">
    <div class="col-md-4">
        <div class="card shadow-sm h-100">
            <div class="card-header">По брендам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Бренд</th><th class="text-end">Клики</th></tr></thead>
                    <tbody>
                    <?php foreach ($rc_brands as $r): ?>
                    <tr><td><?= h($r['name']) ?></td><td class="text-end"><?= $r['clk'] ?></td></tr>
                    <?php endforeach; ?>
                    <?php if (empty($rc_brands)): ?><tr><td class="text-muted" colspan="2">Нет данных</td></tr><?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card shadow-sm h-100">
            <div class="card-header">По странам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Страна</th><th class="text-end">Клики</th></tr></thead>
                    <tbody>
                    <?php foreach ($rc_countries as $r): ?>
                    <tr>
                        <td>
                            <a href="?tab=redirects&days=<?= $filter_days ?>&country=<?= h($r['country']) ?>" class="text-decoration-none text-body">
                                <img src="https://flagicons.lipis.dev/flags/4x3/<?= h($r['country']) ?>.svg" width="16" class="me-1">
                                <?= h(country_name($r['country'])) ?>
                            </a>
                        </td>
                        <td class="text-end"><?= $r['clk'] ?></td>
                    </tr>
                    <?php endforeach; ?>
                    <?php if (empty($rc_countries)): ?><tr><td class="text-muted" colspan="2">Нет данных</td></tr><?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card shadow-sm h-100">
            <div class="card-header">По источникам</div>
            <div class="card-body p-0">
                <table class="table table-sm mb-0">
                    <thead class="table-light"><tr><th>Источник</th><th class="text-end">Клики</th></tr></thead>
                    <tbody>
                    <?php foreach ($rc_sources as $r): ?>
                    <tr><td class="font-monospace small"><?= h($r['source']) ?></td><td class="text-end"><?= $r['clk'] ?></td></tr>
                    <?php endforeach; ?>
                    <?php if (empty($rc_sources)): ?><tr><td class="text-muted" colspan="2">Нет данных</td></tr><?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>
<?php if (!empty($rc_by_day)): ?>
<div class="card shadow-sm mb-4">
    <div class="card-header">По дням</div>
    <div class="card-body"><canvas id="rcChart" height="80"></canvas></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script>
(function(){
    var days = <?= json_encode(array_column($rc_by_day, 'day')) ?>;
    var clks = <?= json_encode(array_map('intval', array_column($rc_by_day, 'clk'))) ?>;
    new Chart(document.getElementById('rcChart').getContext('2d'), {
        type: 'bar',
        data: { labels: days, datasets: [{ label: 'Redirects', data: clks, backgroundColor: 'rgba(16,185,129,0.7)', borderRadius: 4 }] },
        options: { responsive: true, plugins: { legend: { position: 'top' } }, scales: { x: { grid: { display: false } } } }
    });
})();
</script>
<?php endif; ?>
<?php endif; ?>
</body>
</html>