<?php
declare(strict_types=1);

require_once __DIR__ . '/_bootstrap.php';
require_once __DIR__ . '/_view_helpers.php';

$campaignId = max(0, (int)($_GET['id'] ?? $_POST['id'] ?? 0));
if ($campaignId > 0 && function_exists('reclama_sync_campaign_status')) {
    try {
        reclama_sync_campaign_status($pdo, $campaignId);
    } catch (Throwable $e) {
        // do not break page if sync fails
    }
}
$campaign   = rc_get_campaign_full($pdo, $campaignId, $meId);

if (!$campaign) {
    rc_flash_set('error', rc_t('Кампанію не знайдено.', 'Кампания не найдена.', 'Campaign not found.'));
    rc_redirect('/functional/reclama/my.php');
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!rc_csrf_ok((string)($_POST['csrf'] ?? ''))) {
        rc_flash_set('error', rc_t('Недійсний CSRF-токен.', 'Недействительный CSRF-токен.', 'Invalid CSRF token.'));
        rc_redirect('/functional/reclama/view.php?id=' . $campaignId);
    }

    $action  = trim((string)($_POST['action'] ?? ''));
    $allowed = ['submit', 'pay', 'pause', 'resume', 'cancel'];

    if (in_array($action, $allowed, true)) {
        if ($action === 'submit') {
            if (!reclama_user_can_edit($campaign, $meId)) {
                rc_flash_set('error', rc_t('Цю кампанію зараз не можна відправити на модерацію.', 'Эту кампанию сейчас нельзя отправить на модерацию.', 'This campaign cannot be submitted for moderation right now.'));
            } else {
                try {
                    $needModeration = reclama_require_moderation($pdo);

                    $set = [
                        'status = ?',
                        'moderation_status = ?',
                        'updated_at = NOW()',
                    ];
                    $bind = [
                        $needModeration ? 'pending' : 'approved',
                        $needModeration ? 'pending' : 'approved',
                    ];

                    if (!$needModeration && reclama_column_exists($pdo, 'reclama_campaigns', 'moderated_at')) {
                        $set[] = 'moderated_at = NOW()';
                    }
                    if (reclama_column_exists($pdo, 'reclama_campaigns', 'reject_reason')) {
                        $set[] = 'reject_reason = NULL';
                    }

                    $sql = 'UPDATE reclama_campaigns SET ' . implode(', ', $set) . ' WHERE id = ? AND user_id = ? LIMIT 1';
                    $bind[] = $campaignId;
                    $bind[] = $meId;

                    $st = $pdo->prepare($sql);
                    $st->execute($bind);

                    $sync = reclama_sync_campaign_status($pdo, $campaignId);
                    if (!($sync['ok'] ?? false)) {
                        throw new RuntimeException((string)($sync['reason'] ?? 'sync_failed'));
                    }

                    reclama_log_moderation($pdo, $campaignId, 'submitted', null, 'Submitted by user from view');

                    rc_flash_set(
                        'success',
                        $needModeration
                            ? rc_t('Кампанію відправлено на модерацію.', 'Кампания отправлена на модерацию.', 'The campaign was submitted for moderation.')
                            : rc_t('Кампанію підтверджено. Після оплати вона зможе перейти в показ автоматично.', 'Кампания подтверждена. После оплаты она сможет перейти в показ автоматически.', 'The campaign has been approved. After payment it can move to delivery automatically.')
                    );
                } catch (Throwable $e) {
                    rc_flash_set('error', rc_t('Не вдалося відправити кампанію.', 'Не удалось отправить кампанию.', 'Failed to submit the campaign.'));
                }
            }
        }

        if ($action === 'pay') {
            $mode   = reclama_charge_mode($pdo);
            $payRes = reclama_reserve_or_charge_coins($pdo, $campaign, $mode);

            if (!($payRes['ok'] ?? false)) {
                $reason = (string)($payRes['reason'] ?? '');

                if ($reason === 'insufficient_balance') {
                    $need  = max(0, (int)($payRes['required'] ?? (int)($campaign['total_price'] ?? 0)));
                    $have  = max(0, (int)($payRes['balance'] ?? 0));
                    $short = max(0, $need - $have);

                    rc_flash_set(
                        'error',
                        rc_t(
                            'Недостатньо VM Coins для оплати. Потрібно: ',
                            'Недостаточно VM Coins для оплаты. Нужно: ',
                            'Not enough VM Coins to pay. Required: '
                        ) . rc_num($need)
                        . rc_t(', на балансі: ', ', на балансе: ', ', balance: ') . rc_num($have)
                        . rc_t(', не вистачає: ', ', не хватает: ', ', missing: ') . rc_num($short) . '.'
                    );
                } elseif ($reason === 'campaign_not_payable') {
                    $errors = (array)($payRes['errors'] ?? []);
                    $msg = $errors ? rc_reclama_pay_error_text((string)$errors[0]) : rc_reclama_pay_error_text('status_not_payable');
                    rc_flash_set('error', $msg);
                } elseif ($reason === 'already_paid') {
                    rc_flash_set('warning', rc_t('Кампанія вже оплачена.', 'Кампания уже оплачена.', 'This campaign is already paid.'));
                } else {
                    rc_flash_set('error', rc_t('Не вдалося провести оплату кампанії.', 'Не удалось провести оплату кампании.', 'Failed to process the campaign payment.'));
                }
            } else {
                rc_flash_set(
                    'success',
                    $mode === 'reserve'
                        ? rc_t('Монети зарезервовано для кампанії.', 'Монеты зарезервированы для кампании.', 'Coins were reserved for the campaign.')
                        : rc_t('Кампанію оплачено.', 'Кампания оплачена.', 'The campaign has been paid.')
                );
            }
        }

        if ($action === 'pause' && (string)$campaign['status'] === 'active') {
            try {
                $sql = 'UPDATE reclama_campaigns SET status = "paused", updated_at = NOW()';
                $params = [];
                if (reclama_column_exists($pdo, 'reclama_campaigns', 'paused_at')) {
                    $sql .= ', paused_at = NOW()';
                }
                $sql .= ' WHERE id = ? AND user_id = ? LIMIT 1';
                $params[] = $campaignId;
                $params[] = $meId;

                $st = $pdo->prepare($sql);
                $st->execute($params);

                reclama_log_moderation($pdo, $campaignId, 'paused', null, 'Paused by user');
                rc_flash_set('success', rc_t('Кампанію поставлено на паузу.', 'Кампания поставлена на паузу.', 'The campaign was paused.'));
            } catch (Throwable $e) {
                rc_flash_set('error', rc_t('Не вдалося поставити кампанію на паузу.', 'Не удалось поставить кампанию на паузу.', 'Failed to pause the campaign.'));
            }
        }

        if ($action === 'resume' && (string)$campaign['status'] === 'paused') {
            try {
                $sql = 'UPDATE reclama_campaigns SET status = "approved", updated_at = NOW() WHERE id = ? AND user_id = ? LIMIT 1';
                $st = $pdo->prepare($sql);
                $st->execute([$campaignId, $meId]);

                $sync = reclama_sync_campaign_status($pdo, $campaignId);
                if (!($sync['ok'] ?? false)) {
                    throw new RuntimeException((string)($sync['reason'] ?? 'sync_failed'));
                }

                reclama_log_moderation($pdo, $campaignId, 'resumed', null, 'Resumed by user');
                rc_flash_set('success', rc_t('Кампанію відновлено.', 'Кампания возобновлена.', 'The campaign was resumed.'));
            } catch (Throwable $e) {
                rc_flash_set('error', rc_t('Не вдалося відновити кампанію.', 'Не удалось возобновить кампанию.', 'Failed to resume the campaign.'));
            }
        }

        if ($action === 'cancel' && in_array((string)$campaign['status'], ['draft', 'pending', 'approved', 'paused', 'rejected'], true)) {
            try {
                $pdo->beginTransaction();

                $st = $pdo->prepare('UPDATE reclama_campaigns SET status = "canceled", updated_at = NOW() WHERE id = ? AND user_id = ? LIMIT 1');
                $st->execute([$campaignId, $meId]);

                reclama_log_moderation($pdo, $campaignId, 'canceled', null, 'Canceled by user');

                $refundResult = null;
                if (reclama_payment_is_settled((string)$campaign['payment_status'])) {
                    $refundResult = reclama_refund_unused($pdo, $campaign, date('Y-m-d'), 'User canceled campaign');
                }

                $pdo->commit();

                if ($refundResult && ($refundResult['ok'] ?? false)) {
                    rc_flash_set(
                        'success',
                        rc_t('Кампанію скасовано. Невикористані VM Coins повернуто: ', 'Кампания отменена. Неиспользованные VM Coins возвращены: ', 'The campaign was canceled. Unused VM Coins refunded: ')
                        . rc_num((int)($refundResult['refund_amount'] ?? 0))
                    );
                } else {
                    rc_flash_set('success', rc_t('Кампанію скасовано.', 'Кампания отменена.', 'The campaign was canceled.'));
                }
            } catch (Throwable $e) {
                if ($pdo->inTransaction()) $pdo->rollBack();
                rc_flash_set('error', rc_t('Не вдалося скасувати кампанію.', 'Не удалось отменить кампанию.', 'Failed to cancel the campaign.'));
            }
        }
    }

    rc_redirect('/functional/reclama/view.php?id=' . $campaignId);
}

$flash = rc_flash_get();
if ($campaignId > 0 && function_exists('reclama_sync_campaign_status')) {
    try {
        reclama_sync_campaign_status($pdo, $campaignId);
    } catch (Throwable $e) {
        // do not break page if sync fails
    }
}
$campaign = rc_get_campaign_full($pdo, $campaignId, $meId);

$pageTitle = rc_t('Перегляд кампанії', 'Просмотр кампании', 'Campaign view');
if (function_exists('seo_set')) {
    seo_set([
        'title'     => $pageTitle . ' #' . $campaignId,
        'robots'    => 'noindex,follow',
        'canonical' => '/functional/reclama/view.php?id=' . $campaignId,
    ]);
}

$chargeMode       = reclama_charge_mode($pdo);
$userBalance      = reclama_get_user_balance($pdo, $meId);
$totalPrice       = max(0, (int)($campaign['total_price'] ?? 0));
$pricePerDay      = max(0, (int)($campaign['price_per_day'] ?? 0));
$daysCount        = max(0, (int)($campaign['days_count'] ?? 0));
$payCheck         = reclama_can_pay_campaign($pdo, $campaign);
$canPayNow        = (bool)($payCheck['ok'] ?? false);
$payErrors        = array_values(array_unique((array)($payCheck['errors'] ?? [])));
$shortage         = max(0, $totalPrice - $userBalance);
$paymentStatus    = (string)($campaign['payment_status'] ?? 'unpaid');
$paymentIsSettled = reclama_payment_is_settled($paymentStatus);

$excludeCountries = reclama_normalize_country_codes_list($campaign['exclude_countries'] ?? ($campaign['exclude_countries_json'] ?? []));
$segmentCodes     = reclama_normalize_segment_codes($campaign['segment_codes'] ?? ($campaign['segment_codes_json'] ?? []));
$authScope        = in_array((string)($campaign['auth_scope'] ?? 'all'), ['all', 'guests', 'users'], true)
    ? (string)$campaign['auth_scope']
    : 'all';

$paymentBadge = function (string $status): string {
    return function_exists('rc_payment_badge') ? (string)rc_payment_badge($status) : 'secondary';
};
$paymentLabel = function (string $status): string {
    return function_exists('rc_payment_label') ? (string)rc_payment_label($status) : $status;
};

$series = rc_campaign_daily_series(
    $pdo,
    $campaignId,
    (string)($campaign['start_date'] ?? ''),
    (string)($campaign['end_date'] ?? ''),
    max(1, $daysCount > 0 ? $daysCount : 30)
);

$dailyStats           = (array)($series['days'] ?? []);
$statsTotals          = (array)($series['totals'] ?? []);
$totalImpressions     = (int)($statsTotals['impressions_total'] ?? (int)($campaign['impressions_total'] ?? 0));
$totalClicks          = (int)($statsTotals['clicks_total'] ?? (int)($campaign['clicks_total'] ?? 0));
$totalUniqueViewers   = (int)($statsTotals['unique_viewers_total'] ?? (int)($campaign['unique_viewers_total'] ?? 0));
$ctr                  = (float)($statsTotals['ctr'] ?? (float)($campaign['ctr'] ?? 0));
$statsRangeStart      = (string)($series['start_date'] ?? (string)($campaign['start_date'] ?? ''));
$statsRangeEnd        = (string)($series['end_date'] ?? (string)($campaign['end_date'] ?? ''));
$statsRangeDays       = max(0, (int)($series['days_count'] ?? count($dailyStats)));
$avgDailyImpressions  = $statsRangeDays > 0 ? round($totalImpressions / $statsRangeDays, 2) : 0.0;
$avgDailyClicks       = $statsRangeDays > 0 ? round($totalClicks / $statsRangeDays, 2) : 0.0;
$avgDailyUnique       = $statsRangeDays > 0 ? round($totalUniqueViewers / $statsRangeDays, 2) : 0.0;
$cpc                  = $totalClicks > 0 ? round($totalPrice / $totalClicks, 2) : 0.0;
$cpm                  = $totalImpressions > 0 ? round(($totalPrice / $totalImpressions) * 1000, 2) : 0.0;
$clickedShare         = $totalUniqueViewers > 0 ? round(($totalClicks / $totalUniqueViewers) * 100, 2) : 0.0;

$dailyStatsDesc = $dailyStats;
if ($dailyStatsDesc) {
    $dailyStatsDesc = array_reverse($dailyStatsDesc);
}
$dailyStatsWasTrimmed = false;
if (count($dailyStatsDesc) > 90) {
    $dailyStatsDesc = array_slice($dailyStatsDesc, 0, 90);
    $dailyStatsWasTrimmed = true;
}

require_once __DIR__ . '/../../includes/header.php';
?>
<style>
  .rc-box{border:1px solid rgba(0,0,0,.08);border-radius:18px;background:#fff;box-shadow:0 6px 18px rgba(0,0,0,.04)}
  .rc-thumb{display:block;max-width:100%;height:auto;border-radius:14px;border:1px solid rgba(0,0,0,.08)}
  .rc-pay-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  .rc-pay-stat{padding:14px;border:1px solid rgba(0,0,0,.08);border-radius:14px;background:#fff}
  .rc-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
  .rc-metric{padding:14px;border:1px solid rgba(0,0,0,.08);border-radius:14px;background:#fff}
  .rc-metric .label{font-size:12px;color:#6c757d;margin-bottom:6px}
  .rc-metric .value{font-size:1.05rem;font-weight:700;line-height:1.2}
  .rc-table-wrap{overflow:auto}
  .rc-mini-note{font-size:12px;color:#6c757d}
  .rc-stat-positive{color:#198754}
  .rc-tip-list{display:grid;gap:12px}
  .rc-tip-item{padding:12px 14px;border:1px solid rgba(0,0,0,.08);border-radius:14px;background:#fff}
  .rc-tip-title{font-size:.95rem;font-weight:700;line-height:1.2;margin-bottom:4px}
  .rc-tip-text{font-size:.92rem;color:#6c757d;line-height:1.45}
  @media (max-width: 991.98px){
    .rc-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  }
  @media (max-width: 575.98px){
    .rc-pay-grid,.rc-metric-grid{grid-template-columns:1fr}
  }
</style>

<div class="container py-4">
  <div class="d-flex flex-wrap align-items-center justify-content-between gap-3 mb-4">
    <div>
      <div class="d-flex flex-wrap gap-2 mb-2">
        <span class="badge text-bg-<?= h(rc_status_badge((string)$campaign['status'])) ?>"><?= h(rc_status_label((string)$campaign['status'])) ?></span>
        <span class="badge text-bg-<?= h($paymentBadge((string)$campaign['payment_status'])) ?>"><?= h($paymentLabel((string)$campaign['payment_status'])) ?></span>
        <span class="badge text-bg-light text-dark"><?= h(rc_moderation_label((string)$campaign['moderation_status'])) ?></span>
      </div>
      <h1 class="h3 mb-1"><?= h((string)($campaign['title'] ?: rc_t('Без назви','Без названия','Untitled'))) ?></h1>
      <div class="text-muted">#<?= (int)$campaign['id'] ?> • <?= h($campaign['campaign_type'] === 'banner' ? rc_t('Банерна кампанія', 'Баннерная кампания', 'Banner campaign') : rc_t('Просування поста', 'Продвижение поста', 'Post promotion')) ?></div>
    </div>

    <div class="d-flex flex-wrap gap-2">
      <a class="btn btn-outline-secondary" href="/functional/reclama/my.php">← <?= h(rc_t('До списку', 'К списку', 'To list')) ?></a>
      <?php if (reclama_user_can_edit($campaign, $meId)): ?>
        <a class="btn btn-primary" href="/functional/reclama/edit.php?id=<?= (int)$campaign['id'] ?>"><?= h(rc_t('Редагувати', 'Редактировать', 'Edit')) ?></a>
      <?php endif; ?>
    </div>
  </div>

  <?php if ($flash): ?>
    <div class="alert alert-<?= h($flash['type'] === 'error' ? 'danger' : ($flash['type'] === 'warning' ? 'warning' : 'success')) ?>">
      <?= h((string)$flash['text']) ?>
    </div>
  <?php endif; ?>

  <?php if (!empty($campaign['reject_reason'])): ?>
    <div class="alert alert-warning">
      <strong><?= h(rc_t('Причина відхилення', 'Причина отклонения', 'Rejection reason')) ?>:</strong>
      <?= h((string)$campaign['reject_reason']) ?>
    </div>
  <?php endif; ?>

  <div class="row g-4">
    <div class="col-lg-8">
      <div class="rc-box p-4 mb-4">
        <h2 class="h5 mb-3"><?= h(rc_t('Огляд кампанії', 'Обзор кампании', 'Campaign overview')) ?></h2>

        <div class="row g-3">
          <div class="col-md-4">
            <div class="text-muted small"><?= h(rc_t('Період', 'Период', 'Period')) ?></div>
            <div class="fw-semibold"><?= h((string)$campaign['start_date']) ?> — <?= h((string)$campaign['end_date']) ?></div>
          </div>
          <div class="col-md-4">
            <div class="text-muted small"><?= h(rc_t('Днів', 'Дней', 'Days')) ?></div>
            <div class="fw-semibold"><?= h((string)$daysCount) ?></div>
          </div>
          <div class="col-md-4">
            <div class="text-muted small"><?= h(rc_t('Ціна за день', 'Цена за день', 'Price per day')) ?></div>
            <div class="fw-semibold"><?= h(rc_num($pricePerDay)) ?> VM Coins</div>
          </div>
          <div class="col-md-4">
            <div class="text-muted small"><?= h(rc_t('Плановий бюджет', 'Плановый бюджет', 'Planned budget')) ?></div>
            <div class="fw-semibold"><?= h(rc_num($totalPrice)) ?> VM Coins</div>
          </div>
          <div class="col-md-4">
            <div class="text-muted small"><?= h(rc_t('Діапазон аналітики', 'Диапазон аналитики', 'Analytics range')) ?></div>
            <div class="fw-semibold"><?= h($statsRangeStart) ?> — <?= h($statsRangeEnd) ?></div>
          </div>
          <div class="col-md-4">
            <div class="text-muted small"><?= h(rc_t('Баланс VM Coins', 'Баланс VM Coins', 'VM Coins balance')) ?></div>
            <div class="fw-semibold"><?= h(rc_num($userBalance)) ?></div>
          </div>
        </div>
      </div>

      <div class="rc-box p-4 mb-4">
        <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
          <h2 class="h5 mb-0"><?= h(rc_t('Аналітика кампанії', 'Аналитика кампании', 'Campaign analytics')) ?></h2>
          <div class="rc-mini-note"><?= h(rc_t('Stage 9: покази, кліки, унікальні глядачі, CTR і денна статистика.', 'Stage 9: показы, клики, уникальные зрители, CTR и дневная статистика.', 'Stage 9: impressions, clicks, unique viewers, CTR, and daily stats.')) ?></div>
        </div>

        <div class="rc-metric-grid mb-3">
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Покази', 'Показы', 'Impressions')) ?></div>
            <div class="value"><?= h(rc_num($totalImpressions)) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Кліки', 'Клики', 'Clicks')) ?></div>
            <div class="value"><?= h(rc_num($totalClicks)) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Унікальні глядачі', 'Уникальные зрители', 'Unique viewers')) ?></div>
            <div class="value"><?= h(rc_num($totalUniqueViewers)) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label">CTR</div>
            <div class="value <?= $ctr > 0 ? 'rc-stat-positive' : '' ?>"><?= h(rc_reclama_float($ctr, 2)) ?>%</div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Середньо показів / день', 'Средне показов / день', 'Avg impressions / day')) ?></div>
            <div class="value"><?= h(rc_reclama_float($avgDailyImpressions, 2)) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Середньо кліків / день', 'Средне кликов / день', 'Avg clicks / day')) ?></div>
            <div class="value"><?= h(rc_reclama_float($avgDailyClicks, 2)) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Умовний CPC', 'Условный CPC', 'Estimated CPC')) ?></div>
            <div class="value"><?= $totalClicks > 0 ? h(rc_reclama_float($cpc, 2)) . ' VM' : '—' ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Умовний CPM', 'Условный CPM', 'Estimated CPM')) ?></div>
            <div class="value"><?= $totalImpressions > 0 ? h(rc_reclama_float($cpm, 2)) . ' VM' : '—' ?></div>
          </div>
        </div>

        <div class="rc-metric-grid">
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Середньо унікальних / день', 'Средне уникальных / день', 'Avg uniques / day')) ?></div>
            <div class="value"><?= h(rc_reclama_float($avgDailyUnique, 2)) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Кліків від унікальних', 'Кликов от уникальных', 'Clicks vs unique viewers')) ?></div>
            <div class="value"><?= $totalUniqueViewers > 0 ? h(rc_reclama_float($clickedShare, 2)) . '%' : '—' ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Статус оплати', 'Статус оплаты', 'Payment status')) ?></div>
            <div class="value"><?= h($paymentLabel((string)$campaign['payment_status'])) ?></div>
          </div>
          <div class="rc-metric">
            <div class="label"><?= h(rc_t('Режим списання', 'Режим списания', 'Charge mode')) ?></div>
            <div class="value"><?= h(rc_reclama_payment_mode_label($chargeMode)) ?></div>
          </div>
        </div>
      </div>

      <div class="rc-box p-4 mb-4">
        <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
          <h2 class="h5 mb-0"><?= h(rc_t('Статистика по днях', 'Статистика по дням', 'Daily statistics')) ?></h2>
          <div class="rc-mini-note">
            <?= h($statsRangeStart) ?> — <?= h($statsRangeEnd) ?>
            <?php if ($dailyStatsWasTrimmed): ?>
              <span>• <?= h(rc_t('Показані останні 90 днів.', 'Показаны последние 90 дней.', 'Showing the latest 90 days.')) ?></span>
            <?php endif; ?>
          </div>
        </div>

        <?php if (!$dailyStatsDesc): ?>
          <div class="text-muted"><?= h(rc_t('Поки що немає даних по днях.', 'Пока что нет данных по дням.', 'No daily data yet.')) ?></div>
        <?php else: ?>
          <div class="rc-table-wrap">
            <table class="table table-sm align-middle mb-0">
              <thead>
                <tr>
                  <th><?= h(rc_t('Дата', 'Дата', 'Date')) ?></th>
                  <th class="text-end"><?= h(rc_t('Покази', 'Показы', 'Impressions')) ?></th>
                  <th class="text-end"><?= h(rc_t('Кліки', 'Клики', 'Clicks')) ?></th>
                  <th class="text-end"><?= h(rc_t('Унікальні', 'Уникальные', 'Unique')) ?></th>
                  <th class="text-end">CTR</th>
                </tr>
              </thead>
              <tbody>
                <?php foreach ($dailyStatsDesc as $day): ?>
                  <?php
                    $rowImp = (int)($day['impressions_total'] ?? 0);
                    $rowClk = (int)($day['clicks_total'] ?? 0);
                    $rowUni = (int)($day['unique_viewers_total'] ?? 0);
                    $rowCtr = (float)($day['ctr'] ?? 0);
                  ?>
                  <tr>
                    <td><?= h((string)($day['date'] ?? '')) ?></td>
                    <td class="text-end"><?= h(rc_num($rowImp)) ?></td>
                    <td class="text-end"><?= h(rc_num($rowClk)) ?></td>
                    <td class="text-end"><?= h(rc_num($rowUni)) ?></td>
                    <td class="text-end"><?= h(rc_reclama_float($rowCtr, 2)) ?>%</td>
                  </tr>
                <?php endforeach; ?>
              </tbody>
              <tfoot>
                <tr class="fw-semibold">
                  <td><?= h(rc_t('Разом', 'Итого', 'Total')) ?></td>
                  <td class="text-end"><?= h(rc_num($totalImpressions)) ?></td>
                  <td class="text-end"><?= h(rc_num($totalClicks)) ?></td>
                  <td class="text-end"><?= h(rc_num($totalUniqueViewers)) ?></td>
                  <td class="text-end"><?= h(rc_reclama_float($ctr, 2)) ?>%</td>
                </tr>
              </tfoot>
            </table>
          </div>
        <?php endif; ?>
      </div>

      <?php if ((string)$campaign['campaign_type'] === 'post'): ?>
        <div class="rc-box p-4 mb-4">
          <h2 class="h5 mb-3"><?= h(rc_t('Пост для просування', 'Пост для продвижения', 'Promoted post')) ?></h2>
          <div class="text-muted small mb-2">#<?= (int)($campaign['source_post_id'] ?? 0) ?></div>
          <div><?= nl2br(h((string)($campaign['source_post_body'] ?? ''))) ?></div>
        </div>
      <?php else: ?>
        <div class="rc-box p-4 mb-4">
          <h2 class="h5 mb-3"><?= h(rc_t('Банери', 'Баннеры', 'Banners')) ?></h2>
          <div class="row g-3">
            <div class="col-md-6">
              <div class="text-muted small mb-2"><?= h(rc_t('Desktop-версія', 'Desktop-версия', 'Desktop version')) ?></div>
              <?php if (!empty($campaign['desktop_banner_path'])): ?>
                <img class="rc-thumb" src="<?= h((string)$campaign['desktop_banner_path']) ?>" alt="desktop banner">
              <?php else: ?>
                <div class="text-muted"><?= h(rc_t('Не завантажено', 'Не загружено', 'Not uploaded')) ?></div>
              <?php endif; ?>
            </div>
            <div class="col-md-6">
              <div class="text-muted small mb-2"><?= h(rc_t('Mobile-версія', 'Mobile-версия', 'Mobile version')) ?></div>
              <?php if (!empty($campaign['mobile_banner_path'])): ?>
                <img class="rc-thumb" src="<?= h((string)$campaign['mobile_banner_path']) ?>" alt="mobile banner">
              <?php else: ?>
                <div class="text-muted"><?= h(rc_t('Не завантажено', 'Не загружено', 'Not uploaded')) ?></div>
              <?php endif; ?>
            </div>
          </div>
        </div>
      <?php endif; ?>

      <?php if (!empty($campaign['target_url'])): ?>
        <div class="rc-box p-4 mb-4">
          <h2 class="h5 mb-3"><?= h(rc_t('Посилання', 'Ссылка', 'Target URL')) ?></h2>
          <div class="text-break"><?= h((string)$campaign['target_url']) ?></div>
        </div>
      <?php endif; ?>

      <div class="rc-box p-4">
        <h2 class="h5 mb-3"><?= h(rc_t('Аудиторія і таргетинг', 'Аудитория и таргетинг', 'Audience and targeting')) ?></h2>
        <div class="row g-3">
          <div class="col-md-3">
            <div class="text-muted small"><?= h(rc_t('Країна', 'Страна', 'Country')) ?></div>
            <div class="fw-semibold"><?= h((string)($campaign['country_code'] ?: '—')) ?></div>
          </div>

          <div class="col-md-3">
            <div class="text-muted small"><?= h(rc_t('Виключені країни', 'Исключённые страны', 'Excluded countries')) ?></div>
            <div class="fw-semibold"><?= h($excludeCountries ? implode(', ', $excludeCountries) : '—') ?></div>
          </div>

          <div class="col-md-3">
            <div class="text-muted small"><?= h(rc_t('Місто', 'Город', 'City')) ?></div>
            <div class="fw-semibold"><?= h((string)($campaign['city'] ?: '—')) ?></div>
          </div>

          <div class="col-md-3">
            <div class="text-muted small"><?= h(rc_t('Кому показувати', 'Кому показывать', 'Show to')) ?></div>
            <div class="fw-semibold"><?= h(rc_reclama_auth_scope_label($authScope)) ?></div>
          </div>

          <div class="col-md-3">
            <div class="text-muted small"><?= h(rc_t('Стать', 'Пол', 'Gender')) ?></div>
            <div class="fw-semibold"><?= h(rc_reclama_gender_label((string)($campaign['gender'] ?? 'any'))) ?></div>
          </div>

          <div class="col-md-2">
            <div class="text-muted small"><?= h(rc_t('Вік від', 'Возраст от', 'Age from')) ?></div>
            <div class="fw-semibold"><?= h($campaign['age_from'] === null ? '—' : (string)$campaign['age_from']) ?></div>
          </div>

          <div class="col-md-2">
            <div class="text-muted small"><?= h(rc_t('Вік до', 'Возраст до', 'Age to')) ?></div>
            <div class="fw-semibold"><?= h($campaign['age_to'] === null ? '—' : (string)$campaign['age_to']) ?></div>
          </div>

          <div class="col-md-3">
            <div class="text-muted small"><?= h(rc_t('Мова інтерфейсу', 'Язык интерфейса', 'Interface language')) ?></div>
            <div class="fw-semibold"><?= h(rc_reclama_lang_label((string)($campaign['lang_code'] ?? 'any'))) ?></div>
          </div>

          <div class="col-md-2">
            <div class="text-muted small"><?= h(rc_t('Пристрій', 'Устройство', 'Device')) ?></div>
            <div class="fw-semibold"><?= h(rc_reclama_device_label((string)($campaign['device_type'] ?? 'all'))) ?></div>
          </div>

          <div class="col-md-5">
            <div class="text-muted small"><?= h(rc_t('Сегменти', 'Сегменты', 'Segments')) ?></div>
            <div class="fw-semibold"><?= h($segmentCodes ? implode(', ', $segmentCodes) : '—') ?></div>
          </div>
        </div>
      </div>
    </div>

    <div class="col-lg-4">
      <div class="rc-box p-4 mb-4">
        <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
          <h2 class="h5 mb-0"><?= h(rc_t('Підказка', 'Подсказка', 'Hint')) ?></h2>
          <div class="rc-mini-note"><?= h(rc_t('Коротко про цифри в аналітиці.', 'Коротко о цифрах в аналитике.', 'A quick guide to the analytics numbers.')) ?></div>
        </div>

        <div class="rc-tip-list">
          <div class="rc-tip-item">
            <div class="rc-tip-title"><?= h(rc_t('Покази', 'Показы', 'Impressions')) ?></div>
            <div class="rc-tip-text"><?= h(rc_t('Скільки разів реклама була показана на сторінках сайту.', 'Сколько раз реклама была показана на страницах сайта.', 'How many times the ad was shown on site pages.')) ?></div>
          </div>

          <div class="rc-tip-item">
            <div class="rc-tip-title"><?= h(rc_t('Кліки', 'Клики', 'Clicks')) ?></div>
            <div class="rc-tip-text"><?= h(rc_t('Скільки разів користувачі натиснули на рекламу.', 'Сколько раз пользователи нажали на рекламу.', 'How many times users clicked the ad.')) ?></div>
          </div>

          <div class="rc-tip-item">
            <div class="rc-tip-title"><?= h(rc_t('Унікальні глядачі', 'Уникальные зрители', 'Unique viewers')) ?></div>
            <div class="rc-tip-text"><?= h(rc_t('Скільки різних людей побачили рекламу хоча б один раз.', 'Сколько разных людей увидели рекламу хотя бы один раз.', 'How many different people saw the ad at least once.')) ?></div>
          </div>

          <div class="rc-tip-item">
            <div class="rc-tip-title">CTR</div>
            <div class="rc-tip-text"><?= h(rc_t('Відсоток кліків від кількості показів. Чим вищий CTR, тим цікавіший банер або пропозиція.', 'Процент кликов от количества показов. Чем выше CTR, тем интереснее баннер или предложение.', 'The percentage of clicks relative to impressions. A higher CTR usually means the banner or offer is more appealing.')) ?></div>
          </div>

          <div class="rc-tip-item">
            <div class="rc-tip-title"><?= h(rc_t('Умовний CPC і CPM', 'Условный CPC и CPM', 'Estimated CPC and CPM')) ?></div>
            <div class="rc-tip-text"><?= h(rc_t('Це аналітичні показники: умовна ціна 1 кліку та 1000 показів на основі бюджету кампанії. Вони допомагають оцінити ефективність і не означають окреме ручне списання за кожну дію.', 'Это аналитические показатели: условная цена 1 клика и 1000 показов на основе бюджета кампании. Они помогают оценить эффективность и не означают отдельное ручное списание за каждое действие.', 'These are analytics metrics: the estimated cost of 1 click and 1000 impressions based on the campaign budget. They help assess efficiency and do not mean a separate manual charge for every action.')) ?></div>
          </div>

          <div class="rc-tip-item">
            <div class="rc-tip-title"><?= h(rc_t('Статус оплати і режим списання', 'Статус оплаты и режим списания', 'Payment status and charge mode')) ?></div>
            <div class="rc-tip-text"><?= h(rc_t('Статус оплати показує, чи кампанія вже оплачена. Режим списання пояснює, як саме система працює з VM Coins: списує одразу або резервує суму під кампанію.', 'Статус оплаты показывает, оплачена ли кампания. Режим списания объясняет, как именно система работает с VM Coins: списывает сразу или резервирует сумму под кампанию.', 'Payment status shows whether the campaign is already paid. Charge mode explains how the system handles VM Coins: charging them immediately or reserving an amount for the campaign.')) ?></div>
          </div>
        </div>
      </div>

      <div class="rc-box p-4 mb-4">
        <h2 class="h5 mb-3"><?= h(rc_t('Оплата кампанії', 'Оплата кампании', 'Campaign payment')) ?></h2>

        <div class="rc-pay-grid mb-3">
          <div class="rc-pay-stat">
            <div class="text-muted small"><?= h(rc_t('До сплати', 'К оплате', 'Amount due')) ?></div>
            <div class="fw-semibold fs-5"><?= h(rc_num($totalPrice)) ?> VM Coins</div>
          </div>
          <div class="rc-pay-stat">
            <div class="text-muted small"><?= h(rc_t('На балансі', 'На балансе', 'Your balance')) ?></div>
            <div class="fw-semibold fs-5"><?= h(rc_num($userBalance)) ?> VM Coins</div>
          </div>
        </div>

        <div class="small text-muted mb-2">
          <?= h(rc_t('Режим:', 'Режим:', 'Mode:')) ?> <?= h(rc_reclama_payment_mode_label($chargeMode)) ?>
        </div>

        <?php if ($paymentIsSettled): ?>
          <div class="alert alert-success mb-3">
            <?= h($chargeMode === 'reserve'
                ? rc_t('Монети для цієї кампанії вже зарезервовано.', 'Монеты для этой кампании уже зарезервированы.', 'Coins for this campaign have already been reserved.')
                : rc_t('Кампанія вже оплачена.', 'Кампания уже оплачена.', 'The campaign is already paid.')) ?>
          </div>
        <?php elseif ($canPayNow): ?>
          <?php if ($shortage > 0): ?>
            <div class="alert alert-warning mb-3">
              <?= h(rc_t('На балансі недостатньо монет для оплати.', 'На балансе недостаточно монет для оплаты.', 'There are not enough coins on the balance for payment.')) ?>
            </div>
          <?php else: ?>
            <div class="alert alert-info mb-3">
              <?= h($chargeMode === 'reserve'
                  ? rc_t('Після підтвердження потрібна сума буде зарезервована під цю кампанію.', 'После подтверждения нужная сумма будет зарезервирована под эту кампанию.', 'After confirmation, the required amount will be reserved for this campaign.')
                  : rc_t('Після підтвердження VM Coins будуть списані з твого балансу.', 'После подтверждения VM Coins будут списаны с твоего баланса.', 'After confirmation, VM Coins will be deducted from your balance.')) ?>
            </div>
          <?php endif; ?>
        <?php else: ?>
          <div class="alert alert-secondary mb-3">
            <?= h($payErrors ? rc_reclama_pay_error_text((string)$payErrors[0]) : rc_t('Оплата зараз недоступна.', 'Оплата сейчас недоступна.', 'Payment is not available right now.')) ?>
          </div>
        <?php endif; ?>

        <?php if (!$paymentIsSettled && $shortage > 0): ?>
          <div class="small text-danger mb-3">
            <?= h(rc_t('Не вистачає', 'Не хватает', 'Missing')) ?>: <?= h(rc_num($shortage)) ?> VM Coins
          </div>
        <?php endif; ?>

        <form method="post" class="d-grid">
          <input type="hidden" name="csrf" value="<?= h(rc_csrf_token()) ?>">
          <input type="hidden" name="id" value="<?= (int)$campaign['id'] ?>">

          <?php if (!$paymentIsSettled && $canPayNow): ?>
            <button
              class="btn btn-success"
              type="submit"
              name="action"
              value="pay"
              <?= $shortage > 0 ? 'disabled' : '' ?>
              onclick="return confirm('<?= h($chargeMode === 'reserve'
                  ? rc_t('Зарезервувати монети для цієї кампанії?', 'Зарезервировать монеты для этой кампании?', 'Reserve coins for this campaign?')
                  : rc_t('Списати VM Coins за цю кампанію?', 'Списать VM Coins за эту кампанию?', 'Charge VM Coins for this campaign?')) ?>');"
            >
              <?= h($chargeMode === 'reserve'
                  ? rc_t('Зарезервувати VM Coins', 'Зарезервировать VM Coins', 'Reserve VM Coins')
                  : rc_t('Оплатити кампанію', 'Оплатить кампанию', 'Pay for campaign')) ?>
            </button>
          <?php else: ?>
            <button class="btn btn-outline-secondary" type="button" disabled>
              <?= h($paymentIsSettled
                  ? rc_t('Оплачено', 'Оплачено', 'Paid')
                  : rc_t('Оплата недоступна', 'Оплата недоступна', 'Payment unavailable')) ?>
            </button>
          <?php endif; ?>
        </form>
      </div>

      <div class="rc-box p-4 sticky-top" style="top:16px;">
        <h2 class="h5 mb-3"><?= h(rc_t('Дії', 'Действия', 'Actions')) ?></h2>

        <?php if (reclama_user_can_edit($campaign, $meId)): ?>
          <div class="d-grid gap-2 mb-3">
            <a class="btn btn-primary" href="/functional/reclama/edit.php?id=<?= (int)$campaign['id'] ?>"><?= h(rc_t('Редагувати кампанію', 'Редактировать кампанию', 'Edit campaign')) ?></a>
          </div>
        <?php endif; ?>

        <form method="post" class="d-grid gap-2">
          <input type="hidden" name="csrf" value="<?= h(rc_csrf_token()) ?>">
          <input type="hidden" name="id" value="<?= (int)$campaign['id'] ?>">

          <?php if (in_array((string)$campaign['status'], ['draft', 'rejected', 'approved'], true) && reclama_user_can_edit($campaign, $meId)): ?>
            <button class="btn btn-primary" type="submit" name="action" value="submit"><?= h(rc_t('Відправити на модерацію', 'Отправить на модерацию', 'Submit for moderation')) ?></button>
          <?php endif; ?>

          <?php if ((string)$campaign['status'] === 'active'): ?>
            <button class="btn btn-outline-secondary" type="submit" name="action" value="pause"><?= h(rc_t('Поставити на паузу', 'Поставить на паузу', 'Pause campaign')) ?></button>
          <?php endif; ?>

          <?php if ((string)$campaign['status'] === 'paused'): ?>
            <button class="btn btn-outline-secondary" type="submit" name="action" value="resume"><?= h(rc_t('Відновити', 'Возобновить', 'Resume campaign')) ?></button>
          <?php endif; ?>

          <?php if (in_array((string)$campaign['status'], ['draft', 'pending', 'approved', 'paused', 'rejected'], true)): ?>
            <button class="btn btn-outline-danger" type="submit" name="action" value="cancel" onclick="return confirm('<?= h(rc_t('Скасувати кампанію?', 'Отменить кампанию?', 'Cancel this campaign?')) ?>');"><?= h(rc_t('Скасувати', 'Отменить', 'Cancel campaign')) ?></button>
          <?php endif; ?>
        </form>

        <hr>
        <div class="small text-muted">
          <?= h(rc_t('Після оплати система одразу оновить статус кампанії. Якщо модерація вже пройдена і період показу активний, кампанія зможе перейти в показ автоматично.', 'После оплаты система сразу обновит статус кампании. Если модерация уже пройдена и период показа активный, кампания сможет перейти в показ автоматически.', 'After payment, the system updates the campaign status immediately. If moderation is already complete and the delivery window is active, the campaign can switch to delivery automatically.')) ?>
        </div>
      </div>
    </div>
  </div>
</div>

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