import { prisma } from '@/lib/db';
import { AHead, KV, Panel } from '@/components/admin/ui';
import { dt, n } from '@/lib/admin';

/** Yapılandırma durumu: anahtarların değeri değil, yalnızca tanımlı olup olmadığı gösterilir. */
export default async function System() {
  const env = (k: string) => !!process.env[k];
  const t0 = Date.now();
  const [ping, counts, cache, cacheHits, tokens, lastWebhook, dbSize] = await Promise.all([
    prisma.$queryRaw`SELECT 1`.then(() => Date.now() - t0).catch(() => -1),
    Promise.all([prisma.user.count(), prisma.order.count(), prisma.payment.count(), prisma.job.count(), prisma.webhookEvent.count(), prisma.adminLog.count()]),
    prisma.parcelCache.count(),
    prisma.parcelCache.aggregate({ _sum: { hits: true } }),
    prisma.authToken.count({ where: { usedAt: null, expiresAt: { gt: new Date() } } }),
    prisma.webhookEvent.findFirst({ orderBy: { createdAt: 'desc' }, select: { createdAt: true, type: true } }),
    prisma.$queryRaw<{ s: string }[]>`SELECT pg_size_pretty(pg_database_size(current_database())) s`.catch(() => [{ s: '?' }]),
  ]);
  const ok = (b: boolean, extra?: string) => <span className={b ? 'font-semibold text-ok' : 'font-semibold text-survey-dark'}>{b ? 'tanımlı' : 'tanımsız'}{extra ? ` · ${extra}` : ''}</span>;
  const [users, orders, pays, jobs, hooks, logs] = counts;
  return (
    <div className="space-y-4">
      <AHead kicker="Yönetim" title="Sistem" />
      <div className="grid gap-4 lg:grid-cols-2">
        <Panel title="Entegrasyonlar">
          <KV rows={[
            ['Uygulama adresi', process.env.APP_URL || <span className="text-survey-dark">APP_URL tanımsız</span>],
            ['Dodo Payments', ok(env('DODO_PAYMENTS_API_KEY'), process.env.DODO_PAYMENTS_ENV === 'live' ? 'canlı' : 'test modu')],
            ['Dodo webhook gizli anahtarı', ok(env('DODO_WEBHOOK_SECRET'))],
            ['Dodo ürünleri', ok(env('DODO_PRODUCT_TEK') && env('DODO_PRODUCT_PAKET') && env('DODO_PRODUCT_OFIS'))],
            [process.env.SMTP_HOST ? 'E-posta (SMTP)' : 'E-posta (Resend)', ok((env('SMTP_HOST') && (!process.env.SMTP_USER || env('SMTP_PASS'))) || env('RESEND_API_KEY'), process.env.MAIL_FROM || undefined)],
            ['Depolama', process.env.S3_BUCKET ? `S3 · ${process.env.S3_BUCKET}` : `yerel disk · ${process.env.STORAGE_DIR || '../data/storage'}`],
            ['Hız sınırı', process.env.REDIS_URL ? 'Redis (replikalar arası ortak)' : 'süreç içi bellek'],
            ['TKGM erişimi', process.env.TKGM_API_BASE ? 'röle (TKGM_API_BASE)' : process.env.TKGM_PROXY_URL ? 'vekil sunucu' : 'doğrudan'],
            ['Harici ajan API', ok(env('ORDER_WEBHOOK_SECRET'), process.env.AGENT_NOTIFY_URL ? 'bildirim adresi var' : undefined)],
            ['Yönetici e-postası', process.env.ADMIN_EMAIL || '—'],
          ]} />
          <p className="mt-3 text-[12px] text-ink-soft">Seslendirme (ElevenLabs) anahtarı yalnızca işçide tanımlıdır, buradan görünmez.</p>
        </Panel>
        <Panel title="Veritabanı">
          <KV rows={[
            ['Yanıt süresi', ping >= 0 ? `${ping} ms` : <span className="text-survey-dark">erişilemiyor</span>], ['Boyut', dbSize[0]?.s],
            ['Kullanıcı', n(users)], ['Sipariş', n(orders)], ['Ödeme', n(pays)], ['Üretim işi', n(jobs)], ['Webhook olayı', n(hooks)], ['Yönetici günlüğü', n(logs)],
            ['TKGM parsel önbelleği', `${n(cache)} parsel · ${n(cacheHits._sum.hits ?? 0)} isabet`], ['Geçerli e-posta jetonu', n(tokens)],
            ['Son webhook', lastWebhook ? `${lastWebhook.type} · ${dt(lastWebhook.createdAt)}` : '—'],
          ]} />
        </Panel>
      </div>
    </div>
  );
}
