<?php
/**
 * modules/admin/usage.php — Gasto: saldo de OpenRouter + uso de KamiCode (global, por usuario, por modelo).
 */
if (!defined('IN_APP')) { die('Acceso denegado'); }

$admin = new Admin($mysqli, $_config);
$money = function ($v) { return '$' . number_format((float)$v, 4); };

// Mote (sobrenombre) del modelo; si no tiene, se muestra como "Ocultas".
$brands = $admin->brands();
$mote = function ($model) use ($brands) {
    return !empty($brands[$model]) ? $brands[$model] : App::t('admin.hidden');
};

/* ---------- DETALLE DE MODELO (clic en una fila por modelo) ---------- */
$modelSel = isset($_GET['model']) ? trim((string)$_GET['model']) : '';
if ($modelSel !== '') {
    $ms    = $admin->modelStats($modelSel);
    $mbu   = $admin->modelByUser($modelSel);
    $daily = $admin->modelDaily($modelSel);
    $page_title   = $mote($modelSel);
    $page_actions = '<a href="/admin/usage/" class="rounded-lg border border-gray-200 px-3 py-1.5 text-sm hover:bg-gray-50 dark:border-ink-700 dark:hover:bg-ink-800">' . App::e(App::t('common.back')) . '</a>';
    ?>
    <div class="space-y-6 px-4 py-6">
      <div class="grid gap-4 sm:grid-cols-3 lg:grid-cols-6">
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_requests')) ?></div><div class="mt-1 text-2xl font-semibold"><?= (int)$ms['req'] ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_sessions')) ?></div><div class="mt-1 text-2xl font-semibold"><?= (int)$ms['sess'] ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_tokens_in')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$ms['tin']) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_tokens_out')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$ms['tout']) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cached')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$ms['tcached']) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cost')) ?></div><div class="mt-1 text-2xl font-semibold"><?= App::e($money($ms['cost'])) ?></div></div>
      </div>

      <div>
        <div class="mb-2 text-xs font-medium text-gray-dark dark:text-gray-light"><?= App::e(App::t('user.activity')) ?></div>
        <?php include __DIR__ . '/../../inc/heatmap.php'; ?>
      </div>

      <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
        <table class="w-full text-sm">
          <thead><tr class="border-b border-gray-200 bg-gray-50 text-left text-xs uppercase tracking-wide text-gray-dark dark:border-ink-700 dark:bg-ink-800 dark:text-gray-light">
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('admin.u_user')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_requests')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_in')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_out')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cached')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cost')) ?></th>
          </tr></thead>
          <tbody class="divide-y divide-gray-200 dark:divide-ink-700">
            <?php if (!$mbu): ?>
              <tr><td colspan="6" class="px-4 py-3 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
            <?php else: foreach ($mbu as $r): ?>
              <tr data-href="/admin/users/<?= (int)$r['id_user'] ?>/" class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
                <td class="px-4 py-2"><?= App::e($r['name'] ?: ('#' . $r['id_user'])) ?></td>
                <td class="px-4 py-2 text-right"><?= (int)$r['req'] ?></td>
                <td class="px-4 py-2 text-right"><?= number_format((int)$r['tin']) ?></td>
                <td class="px-4 py-2 text-right"><?= number_format((int)$r['tout']) ?></td>
                <td class="px-4 py-2 text-right"><?= number_format((int)$r['tcached']) ?></td>
                <td class="px-4 py-2 text-right font-medium"><?= App::e($money($r['cost'])) ?></td>
              </tr>
            <?php endforeach; endif; ?>
          </tbody>
        </table>
      </div>
    </div>
    <?php
    return;
}

/* ---------- DETALLE DE DÍA (clic en una fila por día) ---------- */
$daySel = isset($_GET['day']) ? trim((string)$_GET['day']) : '';
if ($daySel !== '' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $daySel)) {
    $ds  = $admin->dayStats($daySel);
    $dbu = $admin->dayByUser($daySel);
    $dbm = $admin->dayByModel($daySel);
    $page_title   = $daySel;
    $page_actions = '<a href="/admin/usage/" class="rounded-lg border border-gray-200 px-3 py-1.5 text-sm hover:bg-gray-50 dark:border-ink-700 dark:hover:bg-ink-800">' . App::e(App::t('common.back')) . '</a>';
    ?>
    <div class="space-y-6 px-4 py-6">
      <div class="grid gap-4 sm:grid-cols-3 lg:grid-cols-6">
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_requests')) ?></div><div class="mt-1 text-2xl font-semibold"><?= (int)$ds['req'] ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_sessions')) ?></div><div class="mt-1 text-2xl font-semibold"><?= (int)$ds['sess'] ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_tokens_in')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$ds['tin']) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_tokens_out')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$ds['tout']) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cached')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$ds['tcached']) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cost')) ?></div><div class="mt-1 text-2xl font-semibold"><?= App::e($money($ds['cost'])) ?></div></div>
      </div>

      <!-- Por usuario (del día) -->
      <section>
        <h3 class="mb-2 text-sm font-medium"><?= App::e(App::t('admin.u_by_user')) ?></h3>
        <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
          <table class="w-full text-sm">
            <thead><tr class="border-b border-gray-200 bg-gray-50 text-left text-xs uppercase tracking-wide text-gray-dark dark:border-ink-700 dark:bg-ink-800 dark:text-gray-light">
              <th class="px-4 py-2 font-semibold"><?= App::e(App::t('admin.u_user')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_requests')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_sessions')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_in')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_out')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cached')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cost')) ?></th>
            </tr></thead>
            <tbody class="divide-y divide-gray-200 dark:divide-ink-700">
              <?php if (!$dbu): ?>
                <tr><td colspan="7" class="px-4 py-3 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
              <?php else: foreach ($dbu as $r): ?>
                <tr data-href="/admin/users/<?= (int)$r['id_user'] ?>/" class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
                  <td class="px-4 py-2"><?= App::e($r['name'] ?: ('#' . $r['id_user'])) ?><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e($r['email'] ?? '') ?></div></td>
                  <td class="px-4 py-2 text-right"><?= (int)$r['req'] ?></td>
                  <td class="px-4 py-2 text-right"><?= (int)$r['sess'] ?></td>
                  <td class="px-4 py-2 text-right"><?= number_format((int)$r['tin']) ?></td>
                  <td class="px-4 py-2 text-right"><?= number_format((int)$r['tout']) ?></td>
                  <td class="px-4 py-2 text-right"><?= number_format((int)$r['tcached']) ?></td>
                  <td class="px-4 py-2 text-right font-medium"><?= App::e($money($r['cost'])) ?></td>
                </tr>
              <?php endforeach; endif; ?>
            </tbody>
          </table>
        </div>
      </section>

      <!-- Por modelo (del día) -->
      <section>
        <h3 class="mb-2 text-sm font-medium"><?= App::e(App::t('admin.u_by_model')) ?></h3>
        <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
          <table class="w-full text-sm">
            <thead><tr class="border-b border-gray-200 bg-gray-50 text-left text-xs uppercase tracking-wide text-gray-dark dark:border-ink-700 dark:bg-ink-800 dark:text-gray-light">
              <th class="px-4 py-2 font-semibold"><?= App::e(App::t('admin.u_model')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_requests')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_in')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_out')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cached')) ?></th>
              <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cost')) ?></th>
            </tr></thead>
            <tbody class="divide-y divide-gray-200 dark:divide-ink-700">
              <?php if (!$dbm): ?>
                <tr><td colspan="6" class="px-4 py-3 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
              <?php else: foreach ($dbm as $r): ?>
                <tr data-href="/admin/usage/?model=<?= App::e(rawurlencode($r['model'] ?? '')) ?>" class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
                  <td class="px-4 py-2 text-xs"><?= App::e($mote($r['model'] ?? '')) ?></td>
                  <td class="px-4 py-2 text-right"><?= (int)$r['req'] ?></td>
                  <td class="px-4 py-2 text-right"><?= number_format((int)$r['tin']) ?></td>
                  <td class="px-4 py-2 text-right"><?= number_format((int)$r['tout']) ?></td>
                  <td class="px-4 py-2 text-right"><?= number_format((int)$r['tcached']) ?></td>
                  <td class="px-4 py-2 text-right font-medium"><?= App::e($money($r['cost'])) ?></td>
                </tr>
              <?php endforeach; endif; ?>
            </tbody>
          </table>
        </div>
      </section>
    </div>
    <?php
    return;
}

$hasKey = $admin->hasKey();
$or     = $hasKey ? $admin->usage() : null;
$sum     = $admin->usageSummary();
$byUser  = $admin->usageByUser();
$byModel = $admin->usageByModel();
$byDay   = $admin->usageByDay();
$page_title = App::t('admin.usage_title');
$credits = $or['total_credits'] ?? null;
$spent   = $or['total_usage'] ?? null;
$balance = ($credits !== null && $spent !== null) ? ($credits - $spent) : null;
?>
<div class="px-4 py-6 space-y-6">

  <!-- Saldo OpenRouter (cuenta global) -->
  <section>
    <h2 class="mb-2 text-sm font-semibold uppercase tracking-wide text-gray-dark dark:text-gray-light">OpenRouter</h2>
    <?php if (!$hasKey): ?>
      <div class="rounded-lg border border-accent/40 bg-accent-soft px-4 py-3 text-sm text-ink-900"><?= App::e(App::t('admin.need_key')) ?> <a href="/admin/config/" class="font-medium underline"><?= App::e(App::t('admin.config_title')) ?></a></div>
    <?php elseif ($or === null): ?>
      <div class="rounded-lg border border-danger/30 bg-danger/10 px-4 py-3 text-sm text-danger"><?= App::e(App::t('admin.usage_error')) ?></div>
    <?php else: ?>
      <div class="grid gap-4 sm:grid-cols-3">
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.spent')) ?></div><div class="mt-1 text-2xl font-semibold">$<?= App::e(number_format((float)$spent, 2)) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.credits')) ?></div><div class="mt-1 text-2xl font-semibold">$<?= App::e(number_format((float)$credits, 2)) ?></div></div>
        <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.balance')) ?></div><div class="mt-1 text-2xl font-semibold <?= ($balance !== null && $balance <= 0) ? 'text-danger' : '' ?>">$<?= App::e(number_format((float)$balance, 2)) ?></div></div>
      </div>
    <?php endif; ?>
  </section>

  <!-- Uso de KamiCode (mes en curso) -->
  <section>
    <h2 class="mb-2 text-sm font-semibold uppercase tracking-wide text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.usage_kamicode')) ?></h2>
    <div class="grid gap-4 sm:grid-cols-3 lg:grid-cols-6">
      <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_requests')) ?></div><div class="mt-1 text-2xl font-semibold"><?= (int)$sum['month']['req'] ?></div></div>
      <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_sessions')) ?></div><div class="mt-1 text-2xl font-semibold"><?= (int)$sum['month']['sess'] ?></div></div>
      <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_tokens_in')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$sum['month']['tin']) ?></div></div>
      <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_tokens_out')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$sum['month']['tout']) ?></div></div>
      <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cached')) ?></div><div class="mt-1 text-2xl font-semibold"><?= number_format((int)$sum['month']['tcached']) ?></div></div>
      <div class="rounded-lg border border-gray-200 bg-white px-4 py-4 dark:border-ink-700 dark:bg-ink-900"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cost')) ?></div><div class="mt-1 text-2xl font-semibold"><?= App::e($money($sum['month']['cost'])) ?></div></div>
    </div>
  </section>

  <!-- Por día (mes en curso) -->
  <section>
    <h3 class="mb-2 text-sm font-medium"><?= App::e(App::t('admin.u_by_day')) ?></h3>
    <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
      <table class="w-full text-sm">
        <thead>
          <tr class="border-b border-gray-200 bg-gray-50 text-left text-xs uppercase tracking-wide text-gray-dark dark:border-ink-700 dark:bg-ink-800 dark:text-gray-light">
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('admin.u_date')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_requests')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_sessions')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_in')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_out')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cached')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cost')) ?></th>
          </tr>
        </thead>
        <tbody class="divide-y divide-gray-200 dark:divide-ink-700">
          <?php if (!$byDay): ?>
            <tr><td colspan="7" class="px-4 py-4 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
          <?php else: foreach ($byDay as $r): ?>
            <tr data-href="/admin/usage/?day=<?= App::e(rawurlencode($r['d'])) ?>" class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
              <td class="px-4 py-2 font-medium"><?= App::e($r['d']) ?></td>
              <td class="px-4 py-2 text-right"><?= (int)$r['req'] ?></td>
              <td class="px-4 py-2 text-right"><?= (int)$r['sess'] ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tin']) ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tout']) ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tcached']) ?></td>
              <td class="px-4 py-2 text-right font-medium"><?= App::e($money($r['cost'])) ?></td>
            </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>
  </section>

  <!-- Por usuario -->
  <section>
    <h3 class="mb-2 text-sm font-medium"><?= App::e(App::t('admin.u_by_user')) ?></h3>
    <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
      <table class="w-full text-sm">
        <thead>
          <tr class="border-b border-gray-200 bg-gray-50 text-left text-xs uppercase tracking-wide text-gray-dark dark:border-ink-700 dark:bg-ink-800 dark:text-gray-light">
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('admin.u_user')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_requests')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_sessions')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_in')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_out')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cached')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cost')) ?></th>
          </tr>
          <tr class="border-b border-gray-200 bg-gray-50 dark:border-ink-700 dark:bg-ink-800">
            <th class="px-3 py-2"><input type="search" data-col-filter="user" data-filter-target="ubyuser" placeholder="<?= App::e(App::t('admin.filter')) ?>" class="w-full rounded-md border border-gray-200 bg-white px-2 py-1 text-xs font-normal outline-none focus:border-primary-600 dark:border-ink-700 dark:bg-ink-900"></th>
            <th colspan="6"></th>
          </tr>
        </thead>
        <tbody class="divide-y divide-gray-200 dark:divide-ink-700" data-filter-list="ubyuser">
          <?php if (!$byUser): ?>
            <tr><td colspan="7" class="px-4 py-4 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
          <?php else: foreach ($byUser as $r): ?>
            <tr data-filter-row data-href="/admin/users/<?= (int)$r['id_user'] ?>/" data-col-user="<?= App::e(strtolower(($r['name'] ?? '') . ' ' . ($r['email'] ?? ''))) ?>" class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
              <td class="px-4 py-2"><?= App::e($r['name'] ?: ('#' . $r['id_user'])) ?><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e($r['email'] ?? '') ?></div></td>
              <td class="px-4 py-2 text-right"><?= (int)$r['req'] ?></td>
              <td class="px-4 py-2 text-right"><?= (int)$r['sess'] ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tin']) ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tout']) ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tcached']) ?></td>
              <td class="px-4 py-2 text-right font-medium"><?= App::e($money($r['cost'])) ?></td>
            </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>
  </section>

  <!-- Por modelo -->
  <section>
    <h3 class="mb-2 text-sm font-medium"><?= App::e(App::t('admin.u_by_model')) ?></h3>
    <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
      <table class="w-full text-sm">
        <thead>
          <tr class="border-b border-gray-200 bg-gray-50 text-left text-xs uppercase tracking-wide text-gray-dark dark:border-ink-700 dark:bg-ink-800 dark:text-gray-light">
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('admin.u_model')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_requests')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_in')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_tokens_out')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cached')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cache_pct')) ?></th>
            <th class="px-4 py-2 text-right font-semibold"><?= App::e(App::t('admin.u_cost')) ?></th>
          </tr>
          <tr class="border-b border-gray-200 bg-gray-50 dark:border-ink-700 dark:bg-ink-800">
            <th class="px-3 py-2"><input type="search" data-col-filter="model" data-filter-target="ubymodel" placeholder="<?= App::e(App::t('admin.filter')) ?>" class="w-full rounded-md border border-gray-200 bg-white px-2 py-1 text-xs font-normal outline-none focus:border-primary-600 dark:border-ink-700 dark:bg-ink-900"></th>
            <th colspan="6"></th>
          </tr>
        </thead>
        <tbody class="divide-y divide-gray-200 dark:divide-ink-700" data-filter-list="ubymodel">
          <?php if (!$byModel): ?>
            <tr><td colspan="6" class="px-4 py-4 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
          <?php else: foreach ($byModel as $r): ?>
            <?php $pct = (int)$r['tin'] > 0 ? (int)round((int)$r['tcached'] * 100 / (int)$r['tin']) : 0;
                  $pctCls = $pct >= 60 ? 'bg-success/10 text-success' : ($pct >= 25 ? 'bg-accent-soft text-ink-900' : 'bg-danger/10 text-danger'); ?>
            <tr data-filter-row data-href="/admin/usage/?model=<?= App::e(rawurlencode($r['model'] ?? '')) ?>" data-col-model="<?= App::e(strtolower($mote($r['model'] ?? ''))) ?>" class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
              <td class="px-4 py-2 text-xs"><?= App::e($mote($r['model'] ?? '')) ?></td>
              <td class="px-4 py-2 text-right"><?= (int)$r['req'] ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tin']) ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tout']) ?></td>
              <td class="px-4 py-2 text-right"><?= number_format((int)$r['tcached']) ?></td>
              <td class="px-4 py-2 text-right"><span class="rounded-full px-2 py-0.5 text-xs font-medium <?= $pctCls ?>"><?= $pct ?>%</span></td>
              <td class="px-4 py-2 text-right font-medium"><?= App::e($money($r['cost'])) ?></td>
            </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>
  </section>
</div>
