<?php
declare(strict_types=1);

require_once __DIR__ . '/../../includes/start.php';
require_once __DIR__ . '/../_helpers.php';
require_once __DIR__ . '/../_sidebar.php';

$reclamaLib = __DIR__ . '/../../functional/reclama/_lib.php';
if (is_file($reclamaLib)) {
    require_once $reclamaLib;
}
unset($reclamaLib);

$reclamaStats = __DIR__ . '/../../functional/reclama/_stats.php';
if (is_file($reclamaStats)) {
    require_once $reclamaStats;
}
unset($reclamaStats);

if (!headers_sent()) {
    header('X-Robots-Tag: noindex, nofollow, noarchive, nosnippet', true);
    header('Cache-Control: no-store, max-age=0', true);
    header('Pragma: no-cache', true);
}

require_login();

$pdo = (isset($pdo) && $pdo instanceof PDO) ? $pdo : db();
$me  = (isset($me) && is_array($me)) ? $me : current_user();

if (function_exists('require_role')) {
    require_role(['admin']);
} else {
    $role = (string)($me['role'] ?? '');
    if ($role !== 'admin') {
        http_response_code(403);
        exit('Forbidden');
    }
}

if (!function_exists('csrf_token')) {
    function csrf_token(): string
    {
        admin_session_start();
        if (empty($_SESSION['csrf_token'])) {
            $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
        }
        return (string)$_SESSION['csrf_token'];
    }
}

if (!function_exists('csrf_check')) {
    function csrf_check(?string $token): bool
    {
        admin_session_start();
        $sent = (string)($token ?? '');
        $sess = (string)($_SESSION['csrf_token'] ?? '');
        return $sent !== '' && $sess !== '' && hash_equals($sess, $sent);
    }
}

if (!function_exists('is_post')) {
    function is_post(): bool
    {
        return strtoupper((string)($_SERVER['REQUEST_METHOD'] ?? 'GET')) === 'POST';
    }
}

if (!function_exists('admin_reclama_t')) {
    function admin_reclama_t(string $key, string $uk, string $ru, string $en): string
    {
        return admin_tt($key, $uk, $ru, $en);
    }
}

if (!function_exists('admin_reclama_redirect_self')) {
    function admin_reclama_redirect_self(): never
    {
        header('Location: /admin/reclama/', true, 303);
        exit;
    }
}

if (!function_exists('admin_reclama_num')) {
    function admin_reclama_num($n): string
    {
        return number_format((float)$n, 0, '.', ' ');
    }
}

if (!function_exists('admin_reclama_money')) {
    function admin_reclama_money($n): string
    {
        return number_format((float)$n, 0, '.', ' ') . ' VM Coins';
    }
}

if (!function_exists('admin_reclama_float')) {
    function admin_reclama_float($n, int $decimals = 2): string
    {
        return number_format((float)$n, $decimals, '.', ' ');
    }
}

if (!function_exists('admin_reclama_user_label')) {
    function admin_reclama_user_label(array $row): string
    {
        $username = trim((string)($row['username'] ?? ''));
        $name     = trim((string)($row['name'] ?? ''));
        $userId   = (int)($row['user_id'] ?? 0);

        if ($username !== '' && $name !== '') {
            return '@' . $username . ' · ' . $name;
        }
        if ($username !== '') {
            return '@' . $username;
        }
        if ($name !== '') {
            return $name;
        }
        return '#' . $userId;
    }
}

if (!function_exists('admin_reclama_setting_defs')) {
    function admin_reclama_setting_defs(): array
    {
        return [
            'general' => [
                'title' => admin_reclama_t('admin_reclama_grp_general', 'Загальні', 'Общие', 'General'),
                'items' => [
                    'reclama_enabled' => [
                        'type' => 'bool',
                        'label' => admin_reclama_t('admin_reclama_enabled', 'Увімкнути рекламу', 'Включить рекламу', 'Enable advertising'),
                        'help' => admin_reclama_t(
                            'admin_reclama_enabled_h',
                            'Головний перемикач усього рекламного модуля. Якщо вимкнено — кампанії не будуть показуватися на сайті.',
                            'Главный переключатель всего рекламного модуля. Если выключено — кампании не будут показываться на сайте.',
                            'Master switch for the whole advertising module. If disabled, campaigns will not be shown on the site.'
                        ),
                        'default' => '0',
                    ],
                    'reclama_require_moderation' => [
                        'type' => 'bool',
                        'label' => admin_reclama_t('admin_reclama_require_mod', 'Потрібна модерація', 'Нужна модерация', 'Require moderation'),
                        'help' => admin_reclama_t(
                            'admin_reclama_require_mod_h',
                            'Якщо увімкнено — перед показом кампанія має пройти перевірку адміністратором або модератором.',
                            'Если включено — перед показом кампания должна пройти проверку администратором или модератором.',
                            'If enabled, a campaign must be reviewed by an admin or moderator before it can be displayed.'
                        ),
                        'default' => '0',
                    ],
                    'reclama_auto_activate_after_approval' => [
                        'type' => 'bool',
                        'label' => admin_reclama_t('admin_reclama_auto_activate', 'Автозапуск після схвалення', 'Автозапуск после одобрения', 'Auto-activate after approval'),
                        'help' => admin_reclama_t(
                            'admin_reclama_auto_activate_h',
                            'Автоматично переводити схвалену й оплачену кампанію в активний стан без додаткових ручних дій.',
                            'Автоматически переводить одобренную и оплаченную кампанию в активное состояние без дополнительных ручных действий.',
                            'Automatically move an approved and paid campaign to active status without extra manual actions.'
                        ),
                        'default' => '1',
                    ],
                ],
            ],
            'formats' => [
                'title' => admin_reclama_t('admin_reclama_grp_formats', 'Формати', 'Форматы', 'Formats'),
                'items' => [
                    'reclama_allow_post_campaigns' => [
                        'type' => 'bool',
                        'label' => admin_reclama_t('admin_reclama_allow_post', 'Дозволити просування постів', 'Разрешить продвижение постов', 'Allow promoted posts'),
                        'help' => admin_reclama_t(
                            'admin_reclama_allow_post_h',
                            'Дозволяє запускати рекламу у вигляді звичайних постів у стрічці.',
                            'Позволяет запускать рекламу в виде обычных постов в ленте.',
                            'Allows advertising campaigns in the form of regular promoted posts in the feed.'
                        ),
                        'default' => '1',
                    ],
                    'reclama_allow_banner_campaigns' => [
                        'type' => 'bool',
                        'label' => admin_reclama_t('admin_reclama_allow_banner', 'Дозволити банерні кампанії', 'Разрешить баннерные кампании', 'Allow banner campaigns'),
                        'help' => admin_reclama_t(
                            'admin_reclama_allow_banner_h',
                            'Дозволяє створювати окремі рекламні кампанії з банерами.',
                            'Позволяет создавать отдельные рекламные кампании с баннерами.',
                            'Allows separate banner-based advertising campaigns.'
                        ),
                        'default' => '1',
                    ],
                    'reclama_allow_desktop_only' => [
                        'type' => 'bool',
                        'label' => admin_reclama_t('admin_reclama_allow_desktop_only', 'Дозволити desktop only', 'Разрешить desktop only', 'Allow desktop only'),
                        'help' => admin_reclama_t(
                            'admin_reclama_allow_desktop_only_h',
                            'Якщо увімкнено — можна запускати кампанії тільки для комп’ютерної версії без окремого mobile-банера.',
                            'Если включено — можно запускать кампании только для компьютерной версии без отдельного mobile-баннера.',
                            'If enabled, campaigns may target desktop only without requiring a separate mobile banner.'
                        ),
                        'default' => '1',
                    ],
                ],
            ],
            'pricing' => [
                'title' => admin_reclama_t('admin_reclama_grp_pricing', 'Ціни і період', 'Цены и период', 'Pricing and period'),
                'items' => [
                    'reclama_price_per_day' => [
                        'type' => 'int',
                        'label' => admin_reclama_t('admin_reclama_ppd', 'Ціна за 1 день', 'Цена за 1 день', 'Price per day'),
                        'help' => admin_reclama_t(
                            'admin_reclama_ppd_h',
                            'Вартість одного дня показу реклами в VM Coins. Від цього значення рахується бюджет кампанії.',
                            'Стоимость одного дня показа рекламы в VM Coins. От этого значения считается бюджет кампании.',
                            'Cost of one advertising day in VM Coins. Campaign budget is calculated from this value.'
                        ),
                        'default' => '50',
                        'min' => 0,
                        'max' => 1000000,
                    ],
                    'reclama_min_days' => [
                        'type' => 'int',
                        'label' => admin_reclama_t('admin_reclama_min_days', 'Мінімум днів', 'Минимум дней', 'Minimum days'),
                        'help' => admin_reclama_t(
                            'admin_reclama_min_days_h',
                            'Найменша дозволена тривалість рекламної кампанії.',
                            'Минимально допустимая длительность рекламной кампании.',
                            'Minimum allowed duration of an advertising campaign.'
                        ),
                        'default' => '1',
                        'min' => 1,
                        'max' => 365,
                    ],
                    'reclama_max_days' => [
                        'type' => 'int',
                        'label' => admin_reclama_t('admin_reclama_max_days', 'Максимум днів', 'Максимум дней', 'Maximum days'),
                        'help' => admin_reclama_t(
                            'admin_reclama_max_days_h',
                            'Найбільша дозволена тривалість рекламної кампанії.',
                            'Максимально допустимая длительность рекламной кампании.',
                            'Maximum allowed duration of an advertising campaign.'
                        ),
                        'default' => '30',
                        'min' => 1,
                        'max' => 3650,
                    ],
                    'reclama_charge_mode' => [
                        'type' => 'select',
                        'label' => admin_reclama_t('admin_reclama_charge_mode', 'Режим списання', 'Режим списания', 'Charge mode'),
                        'help' => admin_reclama_t(
                            'admin_reclama_charge_mode_h',
                            'Визначає, коли саме списуються кошти: одразу повністю або спочатку резервуються на балансі.',
                            'Определяет, когда именно списываются средства: сразу полностью или сначала резервируются на балансе.',
                            'Defines when funds are charged: paid in full immediately or reserved on the balance first.'
                        ),
                        'default' => 'prepay',
                        'options' => [
                            'prepay'  => admin_reclama_t('admin_reclama_charge_mode_prepay', 'Передоплата', 'Предоплата', 'Prepay'),
                            'reserve' => admin_reclama_t('admin_reclama_charge_mode_reserve', 'Резервування', 'Резервирование', 'Reserve'),
                        ],
                    ],
                ],
            ],
            'feed' => [
                'title' => admin_reclama_t('admin_reclama_grp_feed', 'Показ у стрічці', 'Показ в ленте', 'Feed delivery'),
                'items' => [
                    'reclama_feed_interval_posts' => [
                        'type' => 'int',
                        'label' => admin_reclama_t('admin_reclama_interval', 'Інтервал між рекламами', 'Интервал между рекламами', 'Ads interval'),
                        'help' => admin_reclama_t(
                            'admin_reclama_interval_h',
                            'Через скільки органічних постів система намагатиметься вставити рекламний пост у стрічку.',
                            'Через сколько органических постов система будет пытаться вставить рекламный пост в ленту.',
                            'How many organic posts should appear before the system tries to insert an ad into the feed.'
                        ),
                        'default' => '5',
                        'min' => 1,
                        'max' => 100,
                    ],
                    'reclama_frequency_cap_per_user_day' => [
                        'type' => 'int',
                        'label' => admin_reclama_t('admin_reclama_cap', 'Ліміт показів одному юзеру за день', 'Лимит показов одному юзеру за день', 'Per-user daily cap'),
                        'help' => admin_reclama_t(
                            'admin_reclama_cap_h',
                            'Обмежує максимальну кількість показів реклами одному користувачу за добу.',
                            'Ограничивает максимальное количество показов рекламы одному пользователю за сутки.',
                            'Limits the maximum number of ad impressions shown to one user per day.'
                        ),
                        'default' => '20',
                        'min' => 1,
                        'max' => 1000,
                    ],
                    'reclama_rotation_mode' => [
                        'type' => 'select',
                        'label' => admin_reclama_t('admin_reclama_rotation', 'Ротація', 'Ротация', 'Rotation'),
                        'help' => admin_reclama_t(
                            'admin_reclama_rotation_h',
                            'Визначає, як система обирає кампанії для показу: по черзі або випадково.',
                            'Определяет, как система выбирает кампании для показа: по очереди или случайно.',
                            'Defines how campaigns are selected for display: in turn or randomly.'
                        ),
                        'default' => 'round_robin',
                        'options' => [
                            'round_robin' => admin_reclama_t('admin_reclama_rotation_round_robin', 'По черзі', 'По очереди', 'Round robin'),
                            'random'      => admin_reclama_t('admin_reclama_rotation_random', 'Випадково', 'Случайно', 'Random'),
                        ],
                    ],
                ],
            ],
        ];
    }
}

if (!function_exists('admin_reclama_normalize_settings_input')) {
    function admin_reclama_normalize_settings_input(array $defs, array $post): array
    {
        $out = [];

        foreach ($defs as $group) {
            foreach (($group['items'] ?? []) as $key => $def) {
                $type = (string)($def['type'] ?? 'string');
                $default = (string)($def['default'] ?? '');

                if ($type === 'bool') {
                    $out[$key] = isset($post[$key]) ? '1' : '0';
                    continue;
                }

                if ($type === 'int') {
                    $min = (int)($def['min'] ?? -1000000);
                    $max = (int)($def['max'] ?? 1000000);
                    $val = isset($post[$key]) ? (int)$post[$key] : (int)$default;
                    $val = max($min, min($max, $val));
                    $out[$key] = (string)$val;
                    continue;
                }

                if ($type === 'select') {
                    $options = array_keys((array)($def['options'] ?? []));
                    $val = trim((string)($post[$key] ?? $default));
                    if (!in_array($val, $options, true)) {
                        $val = $default;
                    }
                    $out[$key] = $val;
                    continue;
                }

                $out[$key] = trim((string)($post[$key] ?? $default));
            }
        }

        if ((int)($out['reclama_min_days'] ?? 1) > (int)($out['reclama_max_days'] ?? 30)) {
            $out['reclama_max_days'] = $out['reclama_min_days'];
        }

        return $out;
    }
}

if (!function_exists('admin_reclama_schema_warnings')) {
    function admin_reclama_schema_warnings(PDO $pdo): array
    {
        $warnings = [];

        $requiredTables = [
            'app_settings',
            'reclama_campaigns',
            'reclama_campaign_targeting',
            'reclama_campaign_moderation',
            'reclama_campaign_impressions',
            'reclama_campaign_clicks',
            'reclama_campaign_daily_stats',
        ];

        foreach ($requiredTables as $table) {
            if (!reclama_table_exists($pdo, $table)) {
                $warnings[] = admin_reclama_t(
                    'admin_reclama_warn_tbl_' . $table,
                    'Відсутня таблиця: ' . $table,
                    'Отсутствует таблица: ' . $table,
                    'Missing table: ' . $table
                );
            }
        }

        $requiredCampaignCols = [
            'user_id',
            'campaign_type',
            'title',
            'status',
            'moderation_status',
            'payment_status',
            'start_date',
            'end_date',
            'days_count',
            'price_per_day',
            'total_price',
        ];

        if (reclama_table_exists($pdo, 'reclama_campaigns')) {
            foreach ($requiredCampaignCols as $col) {
                if (!reclama_column_exists($pdo, 'reclama_campaigns', $col)) {
                    $warnings[] = admin_reclama_t(
                        'admin_reclama_warn_col_' . $col,
                        'У таблиці reclama_campaigns відсутня колонка: ' . $col,
                        'В таблице reclama_campaigns отсутствует колонка: ' . $col,
                        'Column is missing in reclama_campaigns: ' . $col
                    );
                }
            }
        }

        return $warnings;
    }
}

/* ===== actions ===== */

$defs = admin_reclama_setting_defs();

if (is_post()) {
    $action = trim((string)($_POST['action'] ?? ''));

    if (!csrf_check((string)($_POST['csrf'] ?? ''))) {
        admin_flash_set(
            'danger',
            admin_reclama_t(
                'admin_reclama_bad_csrf',
                'Невірний CSRF токен.',
                'Неверный CSRF токен.',
                'Invalid CSRF token.'
            )
        );
        admin_reclama_redirect_self();
    }

    if ($action === 'save_settings') {
        try {
            $values = admin_reclama_normalize_settings_input($defs, $_POST);
            reclama_save_settings($pdo, $values);

            admin_flash_set(
                'success',
                admin_reclama_t(
                    'admin_reclama_saved',
                    'Налаштування реклами збережено.',
                    'Настройки рекламы сохранены.',
                    'Advertising settings have been saved.'
                )
            );
        } catch (Throwable $e) {
            error_log('admin/reclama/index.php save settings error: ' . $e->getMessage());
            admin_flash_set(
                'danger',
                admin_reclama_t(
                    'admin_reclama_save_fail',
                    'Не вдалося зберегти налаштування реклами.',
                    'Не удалось сохранить настройки рекламы.',
                    'Failed to save advertising settings.'
                )
            );
        }

        admin_reclama_redirect_self();
    }
}

/* ===== view data ===== */

$flash    = admin_flash_take();
$warnings = admin_reclama_schema_warnings($pdo);
$settings = reclama_load_settings($pdo);
$stats    = function_exists('reclama_admin_overview_stats') ? reclama_admin_overview_stats($pdo) : reclama_campaigns_admin_stats($pdo);

$dailyOverview = function_exists('reclama_admin_daily_overview')
    ? reclama_admin_daily_overview($pdo, null, null, 14)
    : ['days' => [], 'totals' => []];

$topAdvertisers = function_exists('reclama_admin_top_advertisers')
    ? reclama_admin_top_advertisers($pdo, 10)
    : [];

$suspiciousCampaigns = function_exists('reclama_admin_suspicious_campaigns')
    ? reclama_admin_suspicious_campaigns($pdo, 20, 50, 20.0)
    : [];

$dailyRows = (array)($dailyOverview['days'] ?? []);
$dailyRowsDesc = $dailyRows ? array_reverse($dailyRows) : [];
if (count($dailyRowsDesc) > 14) {
    $dailyRowsDesc = array_slice($dailyRowsDesc, 0, 14);
}

$title = admin_reclama_t('admin_reclama_title', 'Реклама — адмінка', 'Реклама — админка', 'Advertising — Admin');

$seo_noindex = true;
$meta_robots = 'noindex, nofollow, noarchive, nosnippet';
$meta_desc   = '';
$canonical   = function_exists('abs_url') ? abs_url('/admin/reclama/') : '/admin/reclama/';

require_once __DIR__ . '/../../includes/header.php';
?>

<div class="container py-3 py-lg-4">
    <div class="row g-4">
        <div class="col-lg-8">
            <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
                <div>
                    <h1 class="h3 mb-1"><?= e(admin_reclama_t('admin_reclama_h1', 'Реклама', 'Реклама', 'Advertising')) ?></h1>
                    <div class="text-muted">
                        <?= e(admin_reclama_t(
                            'admin_reclama_sub',
                            'Статистика рекламного модуля та його налаштування.',
                            'Статистика рекламного модуля и его настройки.',
                            'Advertising module statistics and settings.'
                        )) ?>
                    </div>
                </div>

                <div class="d-flex flex-wrap gap-2">
                    <a href="/admin/reclama/campaigns.php" class="btn btn-outline-primary">
                        <?= e(admin_reclama_t('admin_reclama_campaigns_link', 'Кампанії реклами', 'Кампании рекламы', 'Ad campaigns')) ?>
                    </a>

                    <span class="badge <?= reclama_enabled($pdo) ? 'text-bg-success' : 'text-bg-secondary' ?>">
                        <?= e(reclama_enabled($pdo)
                            ? admin_reclama_t('admin_reclama_on', 'Модуль увімкнено', 'Модуль включён', 'Module enabled')
                            : admin_reclama_t('admin_reclama_off', 'Модуль вимкнено', 'Модуль выключен', 'Module disabled')
                        ) ?>
                    </span>

                    <span class="badge <?= reclama_require_moderation($pdo) ? 'text-bg-warning' : 'text-bg-light' ?>">
                        <?= e(reclama_require_moderation($pdo)
                            ? admin_reclama_t('admin_reclama_mod_enabled', 'Модерація увімкнена', 'Модерация включена', 'Moderation enabled')
                            : admin_reclama_t('admin_reclama_mod_disabled', 'Модерація вимкнена', 'Модерация отключена', 'Moderation disabled')
                        ) ?>
                    </span>
                </div>
            </div>

            <?php if ($flash): ?>
                <div class="alert alert-<?= e((string)$flash['type']) ?> mb-3">
                    <?= e((string)$flash['msg']) ?>
                </div>
            <?php endif; ?>

            <?php if ($warnings): ?>
                <div class="alert alert-warning">
                    <div class="fw-semibold mb-2"><?= e(admin_reclama_t('admin_reclama_schema_warn', 'Попередження по схемі', 'Предупреждения по схеме', 'Schema warnings')) ?></div>
                    <ul class="mb-0">
                        <?php foreach ($warnings as $w): ?>
                            <li><?= e($w) ?></li>
                        <?php endforeach; ?>
                    </ul>
                </div>
            <?php endif; ?>

            <div class="card card-app mb-4">
                <div class="card-body">
                    <h2 class="h5 mb-3"><?= e(admin_reclama_t('admin_reclama_stats', 'Зведення', 'Сводка', 'Overview')) ?></h2>

                    <div class="row g-3">
                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_total_campaigns', 'Кампаній всього', 'Кампаний всего', 'Total campaigns')) ?></div>
                                <div class="h4 mb-0"><?= e(admin_reclama_num($stats['total'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_active_campaigns', 'Активних', 'Активных', 'Active')) ?></div>
                                <div class="h4 mb-0"><?= e(admin_reclama_num($stats['active'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_queue_campaigns', 'На перевірці', 'На проверке', 'In moderation')) ?></div>
                                <div class="h4 mb-0"><?= e(admin_reclama_num($stats['pending'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_paid_campaigns', 'Оплачених', 'Оплаченных', 'Paid')) ?></div>
                                <div class="h4 mb-0"><?= e(admin_reclama_num($stats['paid'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_rejected_campaigns', 'Відхилених', 'Отклонённых', 'Rejected')) ?></div>
                                <div class="h4 mb-0"><?= e(admin_reclama_num($stats['rejected'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_paused_campaigns', 'На паузі', 'На паузе', 'Paused')) ?></div>
                                <div class="h4 mb-0"><?= e(admin_reclama_num($stats['paused'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_imps', 'Покази', 'Показы', 'Impressions')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_num($stats['impressions_total'] ?? 0)) ?></div>
                                <div class="small text-muted mt-1">
                                    <?= e(admin_reclama_t('admin_reclama_today', 'Сьогодні', 'Сегодня', 'Today')) ?>: <?= e(admin_reclama_num($stats['impressions_today'] ?? 0)) ?>
                                </div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_clicks', 'Кліки', 'Клики', 'Clicks')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_num($stats['clicks_total'] ?? 0)) ?></div>
                                <div class="small text-muted mt-1">
                                    <?= e(admin_reclama_t('admin_reclama_today', 'Сьогодні', 'Сегодня', 'Today')) ?>: <?= e(admin_reclama_num($stats['clicks_today'] ?? 0)) ?>
                                </div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_unique_viewers', 'Унікальні глядачі', 'Уникальные зрители', 'Unique viewers')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_num($stats['unique_viewers_total'] ?? 0)) ?></div>
                                <div class="small text-muted mt-1">CTR: <?= e(admin_reclama_float($stats['ctr_total'] ?? 0, 2)) ?>%</div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_advertisers_total', 'Рекламодавці', 'Рекламодатели', 'Advertisers')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_num($stats['advertisers_total'] ?? 0)) ?></div>
                                <div class="small text-muted mt-1">
                                    <?= e(admin_reclama_t('admin_reclama_active_advertisers', 'Активні зараз', 'Активные сейчас', 'Active now')) ?>: <?= e(admin_reclama_num($stats['active_advertisers'] ?? 0)) ?>
                                </div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_campaigns_with_imps', 'Кампанії з показами', 'Кампании с показами', 'Campaigns with impressions')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_num($stats['campaigns_with_imps'] ?? 0)) ?></div>
                                <div class="small text-muted mt-1">
                                    <?= e(admin_reclama_t('admin_reclama_campaigns_with_clicks', 'З кліками', 'С кликами', 'With clicks')) ?>: <?= e(admin_reclama_num($stats['campaigns_with_clicks'] ?? 0)) ?>
                                </div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-3">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_suspicious', 'Підозрілий CTR', 'Подозрительный CTR', 'Suspicious CTR')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_num($stats['suspicious_campaigns'] ?? 0)) ?></div>
                                <div class="small text-muted mt-1"><?= e(admin_reclama_t('admin_reclama_suspicious_hint', 'CTR ≥ 20% при 50+ показах', 'CTR ≥ 20% при 50+ показах', 'CTR ≥ 20% with 50+ impressions')) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-6">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_budget_all', 'Бюджет всіх кампаній', 'Бюджет всех кампаний', 'Total campaigns budget')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_money($stats['total_budget'] ?? 0)) ?></div>
                            </div>
                        </div>

                        <div class="col-sm-6 col-xl-6">
                            <div class="border rounded-3 p-3 h-100">
                                <div class="text-muted small mb-1"><?= e(admin_reclama_t('admin_reclama_budget_paid', 'Оплачений бюджет', 'Оплаченный бюджет', 'Paid budget')) ?></div>
                                <div class="h5 mb-0"><?= e(admin_reclama_money($stats['paid_budget'] ?? 0)) ?></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="card card-app mb-4">
                <div class="card-body">
                    <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
                        <div>
                            <h2 class="h5 mb-0"><?= e(admin_reclama_t('admin_reclama_daily_h', 'Динаміка за останні дні', 'Динамика за последние дни', 'Recent daily dynamics')) ?></h2>
                            <div class="small text-muted mt-1">
                                <?= e((string)($dailyOverview['start_date'] ?? '')) ?> → <?= e((string)($dailyOverview['end_date'] ?? '')) ?>
                            </div>
                        </div>
                        <div class="small text-muted">
                            CTR: <?= e(admin_reclama_float((float)(($dailyOverview['totals']['ctr'] ?? 0)), 2)) ?>%
                        </div>
                    </div>

                    <?php if (!$dailyRowsDesc): ?>
                        <div class="text-muted">
                            <?= e(admin_reclama_t('admin_reclama_daily_empty', 'Ще немає добової статистики.', 'Пока нет суточной статистики.', 'No daily stats yet.')) ?>
                        </div>
                    <?php else: ?>
                        <div class="table-responsive">
                            <table class="table table-sm align-middle mb-0">
                                <thead>
                                    <tr>
                                        <th><?= e(admin_reclama_t('admin_reclama_date', 'Дата', 'Дата', 'Date')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_imps', 'Покази', 'Показы', 'Impressions')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_clicks', 'Кліки', 'Клики', 'Clicks')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_unique_viewers', 'Унікальні', 'Уникальные', 'Unique')) ?></th>
                                        <th class="text-end">CTR</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php foreach ($dailyRowsDesc as $day): ?>
                                        <tr>
                                            <td><?= e((string)($day['date'] ?? '')) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($day['impressions_total'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($day['clicks_total'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($day['unique_viewers_total'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_float((float)($day['ctr'] ?? 0), 2)) ?>%</td>
                                        </tr>
                                    <?php endforeach; ?>
                                </tbody>
                                <tfoot>
                                    <tr class="fw-semibold">
                                        <td><?= e(admin_reclama_t('admin_reclama_total_row', 'Разом', 'Итого', 'Total')) ?></td>
                                        <td class="text-end"><?= e(admin_reclama_num((int)(($dailyOverview['totals']['impressions_total'] ?? 0)))) ?></td>
                                        <td class="text-end"><?= e(admin_reclama_num((int)(($dailyOverview['totals']['clicks_total'] ?? 0)))) ?></td>
                                        <td class="text-end"><?= e(admin_reclama_num((int)(($dailyOverview['totals']['unique_viewers_total'] ?? 0)))) ?></td>
                                        <td class="text-end"><?= e(admin_reclama_float((float)(($dailyOverview['totals']['ctr'] ?? 0)), 2)) ?>%</td>
                                    </tr>
                                </tfoot>
                            </table>
                        </div>
                    <?php endif; ?>
                </div>
            </div>

            <?php if ($topAdvertisers): ?>
                <div class="card card-app mb-4">
                    <div class="card-body">
                        <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
                            <h2 class="h5 mb-0"><?= e(admin_reclama_t('admin_reclama_top_advertisers', 'Топ рекламодавців', 'Топ рекламодателей', 'Top advertisers')) ?></h2>
                            <span class="text-muted small"><?= e(admin_reclama_t('admin_reclama_top_advertisers_hint', 'За показами та активністю.', 'По показам и активности.', 'By impressions and activity.')) ?></span>
                        </div>

                        <div class="table-responsive">
                            <table class="table table-sm align-middle mb-0">
                                <thead>
                                    <tr>
                                        <th><?= e(admin_reclama_t('admin_reclama_user', 'Користувач', 'Пользователь', 'User')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_total_campaigns', 'Кампанії', 'Кампании', 'Campaigns')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_active_campaigns', 'Активні', 'Активные', 'Active')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_imps', 'Покази', 'Показы', 'Impressions')) ?></th>
                                        <th class="text-end"><?= e(admin_reclama_t('admin_reclama_clicks', 'Кліки', 'Клики', 'Clicks')) ?></th>
                                        <th class="text-end">CTR</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php foreach ($topAdvertisers as $row): ?>
                                        <tr>
                                            <td>
                                                <div class="fw-semibold"><?= e(admin_reclama_user_label($row)) ?></div>
                                                <div class="small text-muted"><?= e(admin_reclama_money((int)($row['budget_paid'] ?? 0))) ?></div>
                                            </td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($row['campaigns_total'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($row['active_campaigns'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($row['impressions_total'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_num((int)($row['clicks_total'] ?? 0))) ?></td>
                                            <td class="text-end"><?= e(admin_reclama_float((float)($row['ctr'] ?? 0), 2)) ?>%</td>
                                        </tr>
                                    <?php endforeach; ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            <?php endif; ?>

            <?php if ($suspiciousCampaigns): ?>
                <div class="card card-app mb-4">
                    <div class="card-body">
                        <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
                            <div>
                                <h2 class="h5 mb-0"><?= e(admin_reclama_t('admin_reclama_suspicious_title', 'Підозрілі кампанії', 'Подозрительные кампании', 'Suspicious campaigns')) ?></h2>
                                <div class="small text-muted mt-1"><?= e(admin_reclama_t('admin_reclama_suspicious_desc', 'CTR ≥ 20% при 50+ показах. Варто перевірити якість трафіку.', 'CTR ≥ 20% при 50+ показах. Стоит проверить качество трафика.', 'CTR ≥ 20% with 50+ impressions. Review traffic quality.')) ?></div>
                            </div>
                        </div>

                        <div class="d-grid gap-3">
                            <?php foreach ($suspiciousCampaigns as $row): ?>
                                <?php
                                $campaignId = (int)($row['id'] ?? 0);
                                $ownerLabel = admin_reclama_user_label($row);
                                ?>
                                <div class="border rounded-3 p-3">
                                    <div class="d-flex flex-wrap align-items-start justify-content-between gap-3 mb-2">
                                        <div>
                                            <div class="d-flex flex-wrap align-items-center gap-2 mb-1">
                                                <a class="fw-semibold text-decoration-none" href="/admin/reclama/campaign.php?id=<?= e((string)$campaignId) ?>">
                                                    #<?= e((string)$campaignId) ?> — <?= e((string)($row['title'] ?? '')) ?>
                                                </a>
                                            </div>
                                            <div class="small text-muted"><?= e($ownerLabel) ?></div>
                                        </div>
                                        <div class="text-end">
                                            <div class="fw-semibold text-danger"><?= e(admin_reclama_float((float)($row['ctr'] ?? 0), 2)) ?>%</div>
                                            <div class="small text-muted">CTR</div>
                                        </div>
                                    </div>

                                    <div class="row g-3">
                                        <div class="col-md-4">
                                            <div class="small text-muted mb-1"><?= e(admin_reclama_t('admin_reclama_imps', 'Покази', 'Показы', 'Impressions')) ?></div>
                                            <div><?= e(admin_reclama_num((int)($row['impressions_total'] ?? 0))) ?></div>
                                        </div>
                                        <div class="col-md-4">
                                            <div class="small text-muted mb-1"><?= e(admin_reclama_t('admin_reclama_clicks', 'Кліки', 'Клики', 'Clicks')) ?></div>
                                            <div><?= e(admin_reclama_num((int)($row['clicks_total'] ?? 0))) ?></div>
                                        </div>
                                        <div class="col-md-4">
                                            <div class="small text-muted mb-1"><?= e(admin_reclama_t('admin_reclama_unique_viewers', 'Унікальні', 'Уникальные', 'Unique')) ?></div>
                                            <div><?= e(admin_reclama_num((int)($row['unique_viewers_total'] ?? 0))) ?></div>
                                        </div>
                                    </div>
                                </div>
                            <?php endforeach; ?>
                        </div>
                    </div>
                </div>
            <?php endif; ?>

            <div class="card card-app">
                <div class="card-body">
                    <h2 class="h5 mb-3"><?= e(admin_reclama_t('admin_reclama_settings', 'Налаштування реклами', 'Настройки рекламы', 'Advertising settings')) ?></h2>

                    <form method="post" action="/admin/reclama/">
                        <input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>">
                        <input type="hidden" name="action" value="save_settings">

                        <?php foreach ($defs as $groupKey => $group): ?>
                            <div class="border rounded-3 p-3 mb-3">
                                <h3 class="h6 mb-3"><?= e((string)($group['title'] ?? $groupKey)) ?></h3>

                                <?php foreach (($group['items'] ?? []) as $key => $def): ?>
                                    <?php
                                    $type    = (string)($def['type'] ?? 'string');
                                    $label   = (string)($def['label'] ?? $key);
                                    $help    = (string)($def['help'] ?? '');
                                    $value   = (string)($settings[$key] ?? (string)($def['default'] ?? ''));
                                    $min     = (int)($def['min'] ?? -1000000);
                                    $max     = (int)($def['max'] ?? 1000000);
                                    $options = (array)($def['options'] ?? []);
                                    ?>

                                    <div class="mb-3">
                                        <?php if ($type === 'bool'): ?>
                                            <div class="form-check form-switch">
                                                <input
                                                    class="form-check-input"
                                                    type="checkbox"
                                                    id="<?= e($key) ?>"
                                                    name="<?= e($key) ?>"
                                                    value="1"
                                                    <?= ((int)$value === 1) ? 'checked' : '' ?>
                                                >
                                                <label class="form-check-label fw-semibold" for="<?= e($key) ?>">
                                                    <?= e($label) ?>
                                                </label>
                                            </div>
                                            <?php if ($help !== ''): ?>
                                                <div class="form-text"><?= e($help) ?></div>
                                            <?php endif; ?>

                                        <?php elseif ($type === 'select'): ?>
                                            <label class="form-label fw-semibold" for="<?= e($key) ?>"><?= e($label) ?></label>
                                            <select class="form-select" id="<?= e($key) ?>" name="<?= e($key) ?>">
                                                <?php foreach ($options as $optValue => $optLabel): ?>
                                                    <option value="<?= e((string)$optValue) ?>" <?= ((string)$optValue === $value) ? 'selected' : '' ?>>
                                                        <?= e((string)$optLabel) ?>
                                                    </option>
                                                <?php endforeach; ?>
                                            </select>
                                            <?php if ($help !== ''): ?>
                                                <div class="form-text"><?= e($help) ?></div>
                                            <?php endif; ?>

                                        <?php else: ?>
                                            <label class="form-label fw-semibold" for="<?= e($key) ?>"><?= e($label) ?></label>
                                            <input
                                                class="form-control"
                                                type="number"
                                                id="<?= e($key) ?>"
                                                name="<?= e($key) ?>"
                                                value="<?= e($value) ?>"
                                                min="<?= e((string)$min) ?>"
                                                max="<?= e((string)$max) ?>"
                                                step="1"
                                            >
                                            <?php if ($help !== ''): ?>
                                                <div class="form-text"><?= e($help) ?></div>
                                            <?php endif; ?>
                                        <?php endif; ?>
                                    </div>
                                <?php endforeach; ?>
                            </div>
                        <?php endforeach; ?>

                        <button type="submit" class="btn btn-primary">
                            <?= e(admin_reclama_t('admin_reclama_save_btn', 'Зберегти налаштування', 'Сохранить настройки', 'Save settings')) ?>
                        </button>
                    </form>
                </div>
            </div>
        </div>

        <div class="col-lg-4">
            <?php if (function_exists('admin_sidebar')) admin_sidebar('reclama'); ?>
        </div>
    </div>
</div>

<?php require_once __DIR__ . '/../../includes/footer.php'; ?>