<?php
/**
 * modules/admin/config.php — Configuración: claves de proveedores (OpenRouter, Kimi, MiniMax)
 * y estado del gateway. URL: /admin/config/.
 */
if (!defined('IN_APP')) { die('Acceso denegado'); }

$admin = new Admin($mysqli, $_config);

// Enmascara una key para mostrarla sin revelarla entera.
$maskKey = function ($raw) {
    $raw = (string)$raw;
    if ($raw === '') return '';
    return substr($raw, 0, 6) . str_repeat('•', 8) . substr($raw, -4);
};

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Cada formulario envía solo su(s) campo(s). Si el valor llega enmascarado
    // (contiene •) o vacío, no se sobreescribe.
    foreach (array('openrouter_key', 'kimi_key', 'minimax_key') as $field) {
        if (!isset($_POST[$field])) continue;
        $k = trim($_POST[$field]);
        if ($k !== '' && strpos($k, '•') === false) {
            $admin->setSetting($field, $k);
        }
    }
    App::redirect('/admin/config/');
}

$hasKey = $admin->hasKey();
$ok     = $hasKey ? $admin->testKey() : false;
$gw     = $admin->gatewayStatus();
$masked = $hasKey ? $maskKey($admin->getSetting('openrouter_key', '')) : '';

$kimiMasked    = $maskKey($admin->getSetting('kimi_key', ''));
$minimaxMasked = $maskKey($admin->getSetting('minimax_key', ''));

// Saldos por proveedor (OpenRouter y Moonshot vía API; MiniMax no expone API).
$bal = $admin->providerBalances();
// Badge de saldo como enlace a la plataforma del proveedor (ver/recargar saldo).
// Si no se pudo leer el saldo, muestra "N/A" pero mantiene el enlace.
$balBadge = function ($v, $url) {
    if ($v === null) {
        $cls = 'bg-gray-100 text-gray-dark dark:bg-ink-800 dark:text-gray-light';
        $txt = App::e(App::t('admin.balance')) . ': ' . App::e(App::t('admin.balance_na'));
    } else {
        $cls = $v <= 0 ? 'bg-danger/10 text-danger' : 'bg-success/10 text-success';
        $txt = App::e(App::t('admin.balance')) . ': $' . App::e(number_format((float)$v, 2));
    }
    return '<a href="' . App::e($url) . '" target="_blank" rel="noopener" '
         . 'class="rounded-full px-2 py-0.5 text-xs hover:underline ' . $cls . '">' . $txt . '</a>';
};

$page_title = App::t('admin.config_title');
?>
<div class="px-4 py-6">
  <?php include __DIR__ . '/_tabs.php'; ?>

  <!-- Estado del gateway KamiCode (PING) -->
  <section class="mb-5 max-w-3xl rounded-lg border border-gray-200 bg-white dark:border-ink-700 dark:bg-ink-900">
    <div class="flex flex-wrap items-center gap-x-4 gap-y-1 px-4 py-3">
      <span class="flex items-center gap-2 font-medium">
        <span class="h-2.5 w-2.5 rounded-full <?= $gw['online'] ? 'bg-success' : 'bg-danger' ?>"></span>
        <?= App::e(App::t('admin.gateway')) ?>
      </span>
      <span class="rounded-full px-2 py-0.5 text-xs <?= $gw['online'] ? 'bg-success/10 text-success' : 'bg-danger/10 text-danger' ?>">
        <?= App::e($gw['online'] ? App::t('admin.gateway_online') : App::t('admin.gateway_offline')) ?>
      </span>
      <?php if ($gw['version'] !== ''): ?>
        <span class="text-sm text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.gateway_version')) ?> <span class="font-mono"><?= App::e($gw['version']) ?></span></span>
      <?php endif; ?>
      <?php if ($gw['seconds'] !== null): ?>
        <span class="ml-auto text-xs text-gray-light"><?= App::e(App::t('admin.gateway_last')) ?> <?= (int)$gw['seconds'] ?>s</span>
      <?php endif; ?>
    </div>
  </section>

  <!-- Claves de proveedores (OpenRouter, Kimi, MiniMax) -->
  <section class="max-w-3xl 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('admin.provider_keys')) ?></h2>
    </div>
    <div class="px-4 py-5">
      <p class="mb-4 text-sm text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.provider_keys_hint')) ?></p>
      <form method="post" action="/admin/config/" class="space-y-4">
        <div>
          <label class="flex flex-wrap items-center gap-2 text-sm font-medium">
            <?= App::e(App::t('admin.api_key')) ?>
            <?php if ($hasKey): ?>
              <span class="rounded-full px-2 py-0.5 text-xs <?= $ok ? 'bg-success/10 text-success' : 'bg-danger/10 text-danger' ?>">
                <?= App::e($ok ? App::t('admin.connected') : App::t('admin.bad_key')) ?>
              </span>
            <?php endif; ?>
            <?= $balBadge($bal['openrouter'], 'https://openrouter.ai/settings/credits') ?>
          </label>
          <input type="text" name="openrouter_key" autocomplete="off"
                 value="<?= App::e($masked) ?>"
                 placeholder="sk-or-..."
                 class="mt-1 w-full rounded-lg border border-gray-200 bg-white px-3 py-2 font-mono text-sm outline-none focus:border-primary-600 dark:border-ink-700 dark:bg-ink-800">
        </div>
        <div>
          <label class="flex flex-wrap items-center gap-2 text-sm font-medium">
            <?= App::e(App::t('admin.kimi_key')) ?>
            <?= $balBadge($bal['moonshot'], 'https://platform.moonshot.ai/console/account') ?>
          </label>
          <input type="text" name="kimi_key" autocomplete="off"
                 value="<?= App::e($kimiMasked) ?>"
                 placeholder="sk-..."
                 class="mt-1 w-full rounded-lg border border-gray-200 bg-white px-3 py-2 font-mono text-sm outline-none focus:border-primary-600 dark:border-ink-700 dark:bg-ink-800">
        </div>
        <div>
          <label class="flex flex-wrap items-center gap-2 text-sm font-medium">
            <?= App::e(App::t('admin.minimax_key')) ?>
            <a href="https://platform.minimax.io/user-center/basic-information" target="_blank" rel="noopener"
               class="rounded-full bg-gray-100 px-2 py-0.5 text-xs text-gray-dark hover:underline dark:bg-ink-800 dark:text-gray-light">
              <?= App::e(App::t('admin.balance')) ?>: <?= App::e(App::t('admin.balance_na')) ?>
            </a>
          </label>
          <input type="text" name="minimax_key" autocomplete="off"
                 value="<?= App::e($minimaxMasked) ?>"
                 placeholder="..."
                 class="mt-1 w-full rounded-lg border border-gray-200 bg-white px-3 py-2 font-mono text-sm outline-none focus:border-primary-600 dark:border-ink-700 dark:bg-ink-800">
        </div>
        <p class="text-xs text-gray-dark dark:text-gray-light"><?= App::e(App::t('admin.api_key_hint')) ?></p>
        <button type="submit"
                class="rounded-lg bg-primary-600 px-4 py-2 text-sm font-medium text-white hover:bg-primary-700">
          <?= App::e(App::t('admin.save')) ?>
        </button>
      </form>
    </div>
  </section>
</div>
