<?php
declare(strict_types=1);

require_once __DIR__ . '/_bootstrap.php';

if (!function_exists('rc_reclama_pay_error_short')) {
    function rc_reclama_pay_error_short(string $code): string
    {
        return rc_t(
            match ($code) {
                'status_not_payable'        => 'Спочатку відправ на модерацію',
                'desktop_banner_required'   => 'Потрібен desktop-банер',
                'mobile_without_desktop'    => 'Потрібен desktop-банер',
                'post_campaigns_disabled'   => 'Пости вимкнені',
                'banner_campaigns_disabled' => 'Банери вимкнені',
                default                     => 'Оплата недоступна'
            },
            match ($code) {
                'status_not_payable'        => 'Сначала отправь на модерацию',
                'desktop_banner_required'   => 'Нужен desktop-баннер',
                'mobile_without_desktop'    => 'Нужен desktop-баннер',
                'post_campaigns_disabled'   => 'Посты выключены',
                'banner_campaigns_disabled' => 'Баннеры выключены',
                default                     => 'Оплата недоступна'
            },
            match ($code) {
                'status_not_payable'        => 'Submit for moderation first',
                'desktop_banner_required'   => 'Desktop banner required',
                'mobile_without_desktop'    => 'Desktop banner required',
                'post_campaigns_disabled'   => 'Posts are disabled',
                'banner_campaigns_disabled' => 'Banner are disabled',
                default                     => 'Payment unavailable'
            }
        );
    }
}

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

$flash = rc_flash_get();
$statusFilter = trim((string)($_GET['status'] ?? 'all'));
$allowedFilters = ['all','draft','pending','approved','active','paused','finished','rejected','canceled'];
if (!in_array($statusFilter, $allowedFilters, true)) {
    $statusFilter = 'all';
}

$pageTitle = rc_t('Мої рекламні кампанії', 'Мои рекламные кампании', 'My ad campaigns');
if (function_exists('seo_set')) {
    seo_set([
        'title'     => $pageTitle,
        'robots'    => 'noindex,follow',
        'canonical' => '/functional/reclama/my.php',
    ]);
}

if ($meId > 0 && function_exists('reclama_sync_campaign_status') && function_exists('reclama_table_exists') && reclama_table_exists($pdo, 'reclama_campaigns')) {
    try {
        $stSync = $pdo->prepare("
            SELECT id
            FROM reclama_campaigns
            WHERE user_id = ?
              AND status IN ('draft', 'pending', 'approved', 'active')
            ORDER BY id DESC
            LIMIT 300
        ");
        $stSync->execute([$meId]);
        $syncIds = $stSync->fetchAll(PDO::FETCH_COLUMN) ?: [];
        foreach ($syncIds as $syncId) {
            reclama_sync_campaign_status($pdo, (int)$syncId);
        }
    } catch (Throwable $e) {
        // keep page working even if sync failed
    }
}

$rows           = rc_user_campaigns($pdo, $meId, $statusFilter, 100);
$userBalance    = reclama_get_user_balance($pdo, $meId);
$chargeMode     = reclama_charge_mode($pdo);
$dashboardStats = rc_user_dashboard_stats($pdo, $meId);
$topCampaigns   = rc_user_top_campaigns($pdo, $meId, 5, 'impressions');

$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;
};

$totalCampaigns     = (int)($dashboardStats['total'] ?? 0);
$activeCampaigns    = (int)($dashboardStats['active'] ?? 0);
$budgetTotal        = (int)($dashboardStats['budget_total'] ?? 0);
$budgetPaid         = (int)($dashboardStats['budget_paid'] ?? 0);
$impressionsTotal   = (int)($dashboardStats['impressions_total'] ?? 0);
$clicksTotal        = (int)($dashboardStats['clicks_total'] ?? 0);
$uniqueViewersTotal = (int)($dashboardStats['unique_viewers_total'] ?? 0);
$ctrTotal           = (float)($dashboardStats['ctr'] ?? 0);
$coinsNetSpent      = (int)($dashboardStats['coins_net_spent'] ?? 0);
$coinsRefunded      = (int)($dashboardStats['coins_refunded'] ?? 0);
$withImp            = (int)($dashboardStats['campaigns_with_imps'] ?? 0);
$withClicks         = (int)($dashboardStats['campaigns_with_clicks'] ?? 0);

require_once __DIR__ . '/../../includes/header.php';
?>
<style>
  .rc-card{border:1px solid rgba(0,0,0,.08);border-radius:18px;background:#fff;box-shadow:0 6px 18px rgba(0,0,0,.04)}
  .rc-filters a{border-radius:999px}
  .rc-balance-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:999px;background:#f8f9fa;border:1px solid rgba(0,0,0,.08);font-weight:600}
  .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-kpi-positive{color:#198754}
  .rc-table-wrap{overflow:auto}
  .rc-list-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .rc-top-table td,.rc-top-table th{white-space:nowrap}
  @media (max-width: 991.98px){
    .rc-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  }
  @media (max-width: 575.98px){
    .rc-metric-grid,.rc-list-meta{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>
      <h1 class="h3 mb-1"><?= h($pageTitle) ?></h1>
      <div class="text-muted"><?= h(rc_t('Усі твої кампанії та їх аналітика в одному місці.', 'Все твои кампании и их аналитика в одном месте.', 'All of your campaigns and analytics in one place.')) ?></div>
    </div>
    <div class="d-flex flex-wrap gap-2 align-items-center">
      <span class="rc-balance-chip"><?= h(rc_t('Баланс', 'Баланс', 'Balance')) ?>: <?= h(rc_num($userBalance)) ?> VM Coins</span>
      <a class="btn btn-outline-secondary" href="/functional/reclama/">← <?= h(rc_t('Назад', 'Назад', 'Back')) ?></a>
      <a class="btn btn-primary" href="/functional/reclama/create.php"><?= h(rc_t('Нова кампанія', 'Новая кампания', 'New campaign')) ?></a>
    </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; ?>

  <div class="rc-card 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('Зведення по рекламі', 'Сводка по рекламе', 'Advertising overview')) ?></h2>
      <div class="small text-muted"><?= h(rc_t('Stage 9: розширена аналітика користувача.', 'Stage 9: расширенная аналитика пользователя.', 'Stage 9: extended user analytics.')) ?></div>
    </div>

    <div class="rc-metric-grid">
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Усього кампаній', 'Всего кампаний', 'Total campaigns')) ?></div>
        <div class="value"><?= h(rc_num($totalCampaigns)) ?></div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Активні', 'Активные', 'Active')) ?></div>
        <div class="value"><?= h(rc_num($activeCampaigns)) ?></div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Загальний бюджет', 'Общий бюджет', 'Total budget')) ?></div>
        <div class="value"><?= h(rc_num($budgetTotal)) ?> VM</div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Оплачений бюджет', 'Оплаченный бюджет', 'Paid budget')) ?></div>
        <div class="value"><?= h(rc_num($budgetPaid)) ?> VM</div>
      </div>

      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Покази', 'Показы', 'Impressions')) ?></div>
        <div class="value"><?= h(rc_num($impressionsTotal)) ?></div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Кліки', 'Клики', 'Clicks')) ?></div>
        <div class="value"><?= h(rc_num($clicksTotal)) ?></div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Унікальні глядачі', 'Уникальные зрители', 'Unique viewers')) ?></div>
        <div class="value"><?= h(rc_num($uniqueViewersTotal)) ?></div>
      </div>
      <div class="rc-metric">
        <div class="label">CTR</div>
        <div class="value <?= $ctrTotal > 0 ? 'rc-kpi-positive' : '' ?>"><?= h(rc_reclama_float($ctrTotal, 2)) ?>%</div>
      </div>

      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Чисто витрачено', 'Чисто потрачено', 'Net spent')) ?></div>
        <div class="value"><?= h(rc_num($coinsNetSpent)) ?> VM</div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Повернено', 'Возвращено', 'Refunded')) ?></div>
        <div class="value"><?= h(rc_num($coinsRefunded)) ?> VM</div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Кампаній з показами', 'Кампаний с показами', 'Campaigns with impressions')) ?></div>
        <div class="value"><?= h(rc_num($withImp)) ?></div>
      </div>
      <div class="rc-metric">
        <div class="label"><?= h(rc_t('Кампаній з кліками', 'Кампаний с кликами', 'Campaigns with clicks')) ?></div>
        <div class="value"><?= h(rc_num($withClicks)) ?></div>
      </div>
    </div>
  </div>

  <?php if ($topCampaigns): ?>
    <div class="rc-card 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('Топ кампаній', 'Топ кампаний', 'Top campaigns')) ?></h2>
        <div class="small text-muted"><?= h(rc_t('За показами.', 'По показам.', 'By impressions.')) ?></div>
      </div>

      <div class="rc-table-wrap">
        <table class="table table-sm align-middle mb-0 rc-top-table">
          <thead>
            <tr>
              <th><?= h(rc_t('Кампанія', 'Кампания', 'Campaign')) ?></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>
              <th></th>
            </tr>
          </thead>
          <tbody>
            <?php foreach ($topCampaigns as $top): ?>
              <tr>
                <td>
                  <div class="fw-semibold"><?= h((string)($top['title'] ?: rc_t('Без назви','Без названия','Untitled'))) ?></div>
                  <div class="small text-muted">#<?= (int)($top['id'] ?? 0) ?> • <?= h(rc_status_label((string)($top['status'] ?? ''))) ?></div>
                </td>
                <td class="text-end"><?= h(rc_num((int)($top['impressions_total'] ?? 0))) ?></td>
                <td class="text-end"><?= h(rc_num((int)($top['clicks_total'] ?? 0))) ?></td>
                <td class="text-end"><?= h(rc_num((int)($top['unique_viewers_total'] ?? 0))) ?></td>
                <td class="text-end"><?= h(rc_reclama_float((float)($top['ctr'] ?? 0), 2)) ?>%</td>
                <td class="text-end">
                  <a class="btn btn-sm btn-outline-primary" href="/functional/reclama/view.php?id=<?= (int)($top['id'] ?? 0) ?>"><?= h(rc_t('Відкрити', 'Открыть', 'Open')) ?></a>
                </td>
              </tr>
            <?php endforeach; ?>
          </tbody>
        </table>
      </div>
    </div>
  <?php endif; ?>

  <div class="rc-card p-3 mb-4 rc-filters d-flex flex-wrap gap-2">
    <?php foreach ($allowedFilters as $f): ?>
      <?php $label = $f === 'all' ? rc_t('Усі','Все','All') : rc_status_label($f); ?>
      <a class="btn btn-sm <?= $statusFilter === $f ? 'btn-primary' : 'btn-outline-secondary' ?>" href="/functional/reclama/my.php?status=<?= h(rawurlencode($f)) ?>"><?= h($label) ?></a>
    <?php endforeach; ?>
  </div>

  <?php if (!$rows): ?>
    <div class="rc-card p-4 text-muted">
      <?= h($statusFilter === 'all'
          ? rc_t('Кампаній поки немає.', 'Кампаний пока нет.', 'There are no campaigns yet.')
          : rc_t('За цим статусом кампаній немає.', 'По этому статусу кампаний нет.', 'There are no campaigns with this status.')) ?>
    </div>
  <?php else: ?>
    <div class="d-grid gap-3">
      <?php foreach ($rows as $row): ?>
        <?php
          $rowTotal     = max(0, (int)($row['total_price'] ?? 0));
          $rowImp       = max(0, (int)($row['impressions_total'] ?? 0));
          $rowClk       = max(0, (int)($row['clicks_total'] ?? 0));
          $rowUniq      = max(0, (int)($row['unique_viewers_total'] ?? 0));
          $rowCtr       = (float)($row['ctr'] ?? 0);
          $rowPayCheck  = reclama_can_pay_campaign($pdo, $row);
          $rowCanPay    = (bool)($rowPayCheck['ok'] ?? false);
          $rowPayErrors = array_values(array_unique((array)($rowPayCheck['errors'] ?? [])));
          $rowShort     = max(0, $rowTotal - $userBalance);
          $rowPaid      = reclama_payment_is_settled((string)($row['payment_status'] ?? 'unpaid'));
          $rowCpc       = $rowClk > 0 ? round($rowTotal / $rowClk, 2) : 0.0;
        ?>
        <div class="rc-card p-3 p-lg-4">
          <div class="row g-3 align-items-center">
            <div class="col-lg-5">
              <div class="d-flex flex-wrap gap-2 mb-2">
                <span class="badge text-bg-<?= h(rc_status_badge((string)$row['status'])) ?>"><?= h(rc_status_label((string)$row['status'])) ?></span>
                <span class="badge text-bg-<?= h($paymentBadge((string)$row['payment_status'])) ?>"><?= h($paymentLabel((string)$row['payment_status'])) ?></span>
                <span class="badge text-bg-light text-dark"><?= h(rc_moderation_label((string)$row['moderation_status'])) ?></span>
              </div>

              <div class="h5 mb-1"><?= h((string)($row['title'] ?: rc_t('Без назви','Без названия','Untitled'))) ?></div>

              <div class="small text-muted mb-2">
                #<?= (int)$row['id'] ?> • <?= h($row['campaign_type'] === 'banner' ? rc_t('Банер', 'Баннер', 'Banner') : rc_t('Просування поста', 'Продвижение поста', 'Post promotion')) ?>
                <span class="mx-2">•</span>
                <?= h((string)$row['start_date']) ?> — <?= h((string)$row['end_date']) ?>
              </div>

              <?php if (!empty($row['source_post_body'])): ?>
                <div class="text-muted small"><?= h(rc_excerpt((string)$row['source_post_body'], 160)) ?></div>
              <?php elseif (!empty($row['target_url'])): ?>
                <div class="text-muted small text-break"><?= h((string)$row['target_url']) ?></div>
              <?php endif; ?>
            </div>

            <div class="col-lg-4">
              <div class="rc-list-meta">
                <div>
                  <div class="small text-muted"><?= h(rc_t('Бюджет', 'Бюджет', 'Budget')) ?></div>
                  <div class="fw-semibold mb-2"><?= h(rc_num($rowTotal)) ?> VM Coins</div>
                </div>
                <div>
                  <div class="small text-muted">CTR</div>
                  <div class="fw-semibold mb-2"><?= h(rc_reclama_float($rowCtr, 2)) ?>%</div>
                </div>
                <div>
                  <div class="small text-muted"><?= h(rc_t('Покази', 'Показы', 'Impressions')) ?></div>
                  <div class="fw-semibold"><?= h(rc_num($rowImp)) ?></div>
                </div>
                <div>
                  <div class="small text-muted"><?= h(rc_t('Кліки', 'Клики', 'Clicks')) ?></div>
                  <div class="fw-semibold"><?= h(rc_num($rowClk)) ?></div>
                </div>
                <div>
                  <div class="small text-muted"><?= h(rc_t('Унікальні', 'Уникальные', 'Unique')) ?></div>
                  <div class="fw-semibold"><?= h(rc_num($rowUniq)) ?></div>
                </div>
                <div>
                  <div class="small text-muted"><?= h(rc_t('Умовний CPC', 'Условный CPC', 'Estimated CPC')) ?></div>
                  <div class="fw-semibold"><?= $rowClk > 0 ? h(rc_reclama_float($rowCpc, 2)) . ' VM' : '—' ?></div>
                </div>
              </div>

              <div class="mt-2">
                <?php if (!$rowPaid): ?>
                  <div class="small <?= $rowShort > 0 ? 'text-danger' : 'text-muted' ?>">
                    <?= h(rc_t('До сплати', 'К оплате', 'Amount due')) ?>: <?= h(rc_num($rowTotal)) ?>
                  </div>
                  <?php if ($rowShort > 0): ?>
                    <div class="small text-danger"><?= h(rc_t('Не вистачає', 'Не хватает', 'Missing')) ?>: <?= h(rc_num($rowShort)) ?></div>
                  <?php elseif (!$rowCanPay && $rowPayErrors): ?>
                    <div class="small text-warning"><?= h(rc_reclama_pay_error_short((string)$rowPayErrors[0])) ?></div>
                  <?php else: ?>
                    <div class="small text-success"><?= h($chargeMode === 'reserve'
                        ? rc_t('Можна резервувати', 'Можно резервировать', 'Ready to reserve')
                        : rc_t('Можна оплатити', 'Можно оплатить', 'Ready to pay')) ?></div>
                  <?php endif; ?>
                <?php else: ?>
                  <div class="small text-success"><?= h(rc_t('Оплата проведена або зарезервована.', 'Оплата проведена или зарезервирована.', 'Paid or reserved.')) ?></div>
                <?php endif; ?>
              </div>
            </div>

            <div class="col-lg-3">
              <div class="d-grid gap-2">
                <a class="btn btn-primary btn-sm" href="/functional/reclama/view.php?id=<?= (int)$row['id'] ?>"><?= h(rc_t('Відкрити', 'Открыть', 'Open')) ?></a>

                <?php if (!$rowPaid && $rowCanPay && $rowShort <= 0): ?>
                  <a class="btn btn-success btn-sm" href="/functional/reclama/view.php?id=<?= (int)$row['id'] ?>">
                    <?= h($chargeMode === 'reserve'
                        ? rc_t('Резервувати', 'Резервировать', 'Reserve')
                        : rc_t('Оплатити', 'Оплатить', 'Pay')) ?>
                  </a>
                <?php elseif (reclama_user_can_edit($row, $meId)): ?>
                  <a class="btn btn-outline-secondary btn-sm" href="/functional/reclama/edit.php?id=<?= (int)$row['id'] ?>"><?= h(rc_t('Редагувати', 'Редактировать', 'Edit')) ?></a>
                <?php else: ?>
                  <button class="btn btn-outline-secondary btn-sm" type="button" disabled>
                    <?= h($rowPaid ? rc_t('Оплачено', 'Оплачено', 'Paid') : rc_t('Доступно у перегляді', 'Доступно в просмотре', 'Open to continue')) ?>
                  </button>
                <?php endif; ?>
              </div>
            </div>
          </div>
        </div>
      <?php endforeach; ?>
    </div>
  <?php endif; ?>
</div>

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