<?php
/**
 * modules/org/index.php — Organización: gestión de cuentas (listado · alta · ficha).
 * El usuario organización (is_org) crea/gestiona cuentas normales (org_id = su id),
 * hasta su límite (max_accounts). Solo ve/edita cuentas propias.
 */
if (!defined('IN_APP')) { die('Acceso denegado'); }

$org   = new Org($mysqli, $_config);
$orgId = (int)$_user['id_user'];
$plans = $org->plans();
$max   = $org->maxAccounts($orgId);
$used  = $org->countAccounts($orgId);

$id       = (int)$_id;
$creating = ($_section === 'new');
$editing  = !$creating && $id > 0;
$error    = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['create_account'])) {
        $ok = $org->createAccount($orgId, $_POST['name'] ?? '', $_POST['email'] ?? '', $_POST['password'] ?? '', $_POST['id_plan'] ?? null);
        if ($ok) App::redirect('/org/');
        $error = $org->_error; $creating = true;
    } elseif (isset($_POST['update_account']) && $id > 0) {
        $ok = $org->updateAccount($orgId, $id, $_POST['name'] ?? '', $_POST['email'] ?? '', $_POST['id_plan'] ?? null, $_POST['password'] ?? '');
        if ($ok) App::redirect('/org/' . $id . '/');
        $error = $org->_error; $editing = true;
    } elseif (isset($_POST['suspend']) && $id > 0) {
        $org->setActive($orgId, $id, (int)$_POST['suspend']);
        App::redirect('/org/' . $id . '/');
    } elseif (!empty($_POST['delete_account']) && $id > 0) {
        $org->deleteAccount($orgId, $id);
        App::redirect('/org/');
    }
}

$page_title = App::t('org.accounts');

/* ---------- ALTA ---------- */
if ($creating):
    $page_title   = App::t('org.new_account');
    $page_actions = '<a href="/org/" 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="px-4 py-6">
  <section class="max-w-2xl rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
    <div class="border-b border-gray-200 px-4 py-3 dark:border-ink-700"><h2 class="font-medium"><?= App::e(App::t('org.new_account')) ?></h2></div>
    <?php if ($used >= $max): ?>
      <div class="px-4 py-5 text-sm text-danger"><?= App::e(App::t('org.limit_reached')) ?></div>
    <?php else: ?>
    <form method="post" action="/org/new/" class="space-y-4 px-4 py-4">
      <?php if ($error): ?><div class="rounded-lg border border-danger/30 bg-danger/10 px-4 py-3 text-sm text-danger"><?= App::e($error) ?></div><?php endif; ?>
      <div class="grid gap-4 sm:grid-cols-2">
        <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('auth.name')) ?></label>
          <input type="text" name="name" required class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800"></div>
        <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('auth.email')) ?></label>
          <input type="email" name="email" required class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800"></div>
        <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('auth.password')) ?></label>
          <div class="flex items-center gap-2">
            <input type="password" name="password" required minlength="8" data-pass-input class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800">
            <button type="button" data-genpass class="shrink-0 rounded-lg border border-gray-200 px-3 py-2 text-sm hover:bg-gray-50 dark:border-ink-700 dark:hover:bg-ink-800"><?= App::e(App::t('common.generate')) ?></button>
          </div></div>
        <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('user.plan')) ?></label>
          <select name="id_plan" class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800">
            <option value=""><?= App::e(App::t('user.no_plan')) ?></option>
            <?php foreach ($plans as $p): ?><option value="<?= (int)$p['id_plan'] ?>"><?= App::e($p['name']) ?></option><?php endforeach; ?>
          </select></div>
      </div>
      <button name="create_account" value="1" class="rounded-lg bg-primary-600 px-4 py-2 text-sm font-medium text-white hover:bg-primary-700"><?= App::e(App::t('user.add')) ?></button>
    </form>
    <?php endif; ?>
  </section>
</div>

<?php
/* ---------- FICHA / EDICIÓN ---------- */
elseif ($editing):
    $u = $org->account($orgId, $id);
    if (!$u) App::redirect('/org/');
    $page_title   = App::e($u['name']);
    $page_actions = '<a href="/org/" 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>';
    $st = $org->userStats($orgId, $id);
    $codeUsage = new Code($mysqli, $_config);   // reutilizamos Code (sin coste) para esta cuenta
    $bm    = $codeUsage->byModel($id);
    $daily = $codeUsage->daily($id);
    $brands = $org->brands();
?>
<div class="space-y-6 px-4 py-6">
  <!-- Pestañas Datos | Uso (por JavaScript) -->
  <div class="inline-flex gap-1 rounded-lg border border-gray-200 bg-gray-100 p-1 dark:border-ink-700 dark:bg-ink-800" data-tabs="orguser">
    <button type="button" data-tab="datos" data-tab-group="orguser" class="rounded-md px-4 py-2 text-sm font-medium bg-white text-primary-700 shadow-sm dark:bg-ink-900 dark:text-primary-300"><?= App::e(App::t('user.tab_data')) ?></button>
    <button type="button" data-tab="uso" data-tab-group="orguser" class="rounded-md px-4 py-2 text-sm font-medium text-gray-dark hover:text-ink-900 dark:text-gray-light dark:hover:text-white"><?= App::e(App::t('user.tab_usage')) ?></button>
  </div>

  <!-- Panel Datos -->
  <div data-tab-panel="datos" data-tab-group="orguser" class="space-y-6">
    <section class="max-w-2xl rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
      <div class="border-b border-gray-200 px-4 py-3 dark:border-ink-700"><h2 class="font-medium"><?= App::e(App::t('user.edit')) ?></h2></div>
      <form method="post" action="/org/<?= $id ?>/" class="space-y-4 px-4 py-4">
        <?php if ($error): ?><div class="rounded-lg border border-danger/30 bg-danger/10 px-4 py-3 text-sm text-danger"><?= App::e($error) ?></div><?php endif; ?>
        <div class="grid gap-4 sm:grid-cols-2">
          <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('auth.name')) ?></label>
            <input type="text" name="name" required value="<?= App::e($u['name']) ?>" class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800"></div>
          <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('auth.email')) ?></label>
            <input type="email" name="email" required value="<?= App::e($u['email']) ?>" class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800"></div>
          <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('user.plan')) ?></label>
            <select name="id_plan" class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800">
              <option value=""><?= App::e(App::t('user.no_plan')) ?></option>
              <?php foreach ($plans as $p): ?><option value="<?= (int)$p['id_plan'] ?>" <?= (int)$u['id_plan'] === (int)$p['id_plan'] ? 'selected' : '' ?>><?= App::e($p['name']) ?></option><?php endforeach; ?>
            </select></div>
          <div><label class="mb-1 block text-sm font-medium"><?= App::e(App::t('user.password_new')) ?></label>
            <div class="flex items-center gap-2">
              <input type="password" name="password" minlength="8" placeholder="<?= App::e(App::t('user.password_keep')) ?>" data-pass-input class="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm dark:border-ink-700 dark:bg-ink-800">
              <button type="button" data-genpass class="shrink-0 rounded-lg border border-gray-200 px-3 py-2 text-sm hover:bg-gray-50 dark:border-ink-700 dark:hover:bg-ink-800"><?= App::e(App::t('common.generate')) ?></button>
            </div></div>
        </div>
        <button name="update_account" value="1" class="rounded-lg bg-primary-600 px-4 py-2 text-sm font-medium text-white hover:bg-primary-700"><?= App::e(App::t('common.save')) ?></button>
      </form>
    </section>

    <section class="max-w-2xl rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
      <div class="border-b border-gray-200 px-4 py-3 dark:border-ink-700"><h2 class="font-medium"><?= App::e(App::t('user.danger')) ?></h2></div>
      <div class="flex flex-wrap items-center gap-3 px-4 py-4">
        <form method="post" action="/org/<?= $id ?>/">
          <input type="hidden" name="suspend" value="<?= (int)$u['is_active'] === 1 ? 0 : 1 ?>">
          <button 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((int)$u['is_active'] === 1 ? App::t('user.suspend') : App::t('user.activate')) ?>
          </button>
        </form>
        <form method="post" action="/org/<?= $id ?>/" onsubmit="return confirm('<?= App::e(App::t('user.delete_confirm')) ?>');">
          <button name="delete_account" value="1" class="rounded-lg border border-danger/30 px-3 py-1.5 text-sm text-danger hover:bg-danger/10"><?= App::e(App::t('user.delete')) ?></button>
        </form>
        <span class="text-xs text-gray-dark dark:text-gray-light"><?= (int)$u['is_active'] === 1 ? App::e(App::t('user.active')) : App::e(App::t('user.suspended')) ?></span>
      </div>
    </section>
  </div>

  <!-- Panel Uso (sin coste) -->
  <div data-tab-panel="uso" data-tab-group="orguser" class="hidden">
    <section class="rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
      <div class="border-b border-gray-200 px-4 py-3 dark:border-ink-700"><h2 class="font-medium"><?= App::e(App::t('user.usage')) ?></h2></div>
      <div class="space-y-5 px-4 py-4">
        <div class="grid gap-3 sm:grid-cols-3 lg:grid-cols-5">
          <div class="rounded-lg border border-gray-200 px-3 py-3 dark:border-ink-700"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_requests')) ?></div><div class="mt-1 text-xl font-semibold"><?= (int)$st['req'] ?></div></div>
          <div class="rounded-lg border border-gray-200 px-3 py-3 dark:border-ink-700"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_sessions')) ?></div><div class="mt-1 text-xl font-semibold"><?= (int)$st['sess'] ?></div></div>
          <div class="rounded-lg border border-gray-200 px-3 py-3 dark:border-ink-700"><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-xl font-semibold"><?= number_format((int)$st['tin']) ?></div></div>
          <div class="rounded-lg border border-gray-200 px-3 py-3 dark:border-ink-700"><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-xl font-semibold"><?= number_format((int)$st['tout']) ?></div></div>
          <div class="rounded-lg border border-gray-200 px-3 py-3 dark:border-ink-700"><div class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_cached')) ?></div><div class="mt-1 text-xl font-semibold"><?= number_format((int)$st['tcached']) ?></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 dark:border-ink-700">
          <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>
            </tr></thead>
            <tbody class="divide-y divide-gray-200 dark:divide-ink-700">
              <?php if (!$bm): ?>
                <tr><td colspan="5" class="px-4 py-3 text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.u_empty')) ?></td></tr>
              <?php else: foreach ($bm as $r): ?>
                <tr>
                  <td class="px-4 py-2 text-xs"><?= App::e(!empty($brands[$r['model']]) ? $brands[$r['model']] : App::t('admin.hidden')) ?></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>
                </tr>
              <?php endforeach; endif; ?>
            </tbody>
          </table>
        </div>
      </div>
    </section>
  </div>
</div>

<?php
/* ---------- LISTADO ---------- */
else:
    $accounts = $org->accounts($orgId);
    $canAdd = $used < $max;
    $page_actions = $canAdd
        ? '<a href="/org/new/" class="rounded-lg bg-primary-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-primary-700">' . App::e(App::t('user.add')) . '</a>'
        : '';
?>
<div class="space-y-4 px-4 py-6">
  <div class="flex items-center gap-2 text-sm text-gray-dark dark:text-gray-light">
    <?= App::e(App::t('org.accounts_used')) ?>:
    <span class="font-semibold text-ink-900 dark:text-paper"><?= (int)$used ?> / <?= (int)$max ?></span>
  </div>

  <div class="overflow-hidden rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
    <div class="overflow-x-auto">
      <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('auth.name')) ?></th>
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('auth.email')) ?></th>
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('user.plan')) ?></th>
            <th class="px-4 py-2 font-semibold"><?= App::e(App::t('user.state')) ?></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="name" data-filter-target="orgusers" 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 class="px-3 py-2"><input type="search" data-col-filter="email" data-filter-target="orgusers" 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 class="px-3 py-2"><input type="search" data-col-filter="plan" data-filter-target="orgusers" 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 class="px-3 py-2">
              <select data-col-filter="state" data-filter-target="orgusers" 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">
                <option value=""><?= App::e(App::t('admin.cap_all')) ?></option>
                <option value="active"><?= App::e(App::t('user.active')) ?></option>
                <option value="suspended"><?= App::e(App::t('user.suspended')) ?></option>
              </select>
            </th>
          </tr>
        </thead>
        <tbody class="divide-y divide-gray-200 dark:divide-ink-700" data-filter-list="orgusers">
          <?php if (!$accounts): ?>
            <tr><td colspan="4" class="px-4 py-4 text-gray-dark dark:text-gray-light"><?= App::e(App::t('org.no_accounts')) ?></td></tr>
          <?php else: foreach ($accounts as $u):
            $state = (int)$u['is_active'] === 1 ? 'active' : 'suspended'; ?>
            <tr data-href="/org/<?= (int)$u['id_user'] ?>/" data-filter-row
                data-col-name="<?= App::e(strtolower($u['name'])) ?>" data-col-email="<?= App::e(strtolower($u['email'])) ?>"
                data-col-plan="<?= App::e(strtolower($u['plan_name'] ?: '')) ?>" data-col-state="<?= App::e($state) ?>"
                class="cursor-pointer hover:bg-gray-50 dark:hover:bg-ink-800/50">
              <td class="px-4 py-2 font-medium"><?= App::e($u['name']) ?></td>
              <td class="px-4 py-2 text-gray-dark dark:text-gray-light"><?= App::e($u['email']) ?></td>
              <td class="px-4 py-2 text-gray-dark dark:text-gray-light"><?= App::e($u['plan_name'] ?: '—') ?></td>
              <td class="px-4 py-2">
                <?php if ((int)$u['is_active'] === 1): ?>
                  <span class="rounded-full bg-success/10 px-2 py-0.5 text-xs text-success"><?= App::e(App::t('user.active')) ?></span>
                <?php else: ?>
                  <span class="rounded-full bg-danger/10 px-2 py-0.5 text-xs text-danger"><?= App::e(App::t('user.suspended')) ?></span>
                <?php endif; ?>
              </td>
            </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>
  </div>
</div>
<?php endif; ?>
