import Link from 'next/link';
import { prisma } from '@/lib/db';
import { AHead, Filters, Pager, fieldSm } from '@/components/admin/ui';
import { PAGE, dt, href, page } from '@/lib/admin';

/** Dodo'dan gelen imzalı webhook olayları (idempotency kaydı). Ödeme sorunlarında ham veriye buradan bakılır. */
export default async function Webhooks({ searchParams }: { searchParams: Promise<{ t?: string; q?: string; page?: string }> }) {
  const sp = await searchParams; const pg = page(sp.page);
  const q = sp.q?.trim();
  const at = (path: string[]) => ({ payload: { path, equals: q } });
  const where = { ...(sp.t ? { type: sp.t } : {}), ...(q ? { OR: [{ id: q }, at(['data', 'payment_id']), at(['data', 'checkout_session_id']), at(['data', 'metadata', 'orderId']), at(['data', 'metadata', 'userId'])] } : {}) };
  const [rows, total, types] = await Promise.all([
    prisma.webhookEvent.findMany({ where, orderBy: { createdAt: 'desc' }, skip: (pg - 1) * PAGE, take: PAGE }),
    prisma.webhookEvent.count({ where }),
    prisma.webhookEvent.groupBy({ by: ['type'], _count: true }),
  ]);
  const params = sp as Record<string, string | undefined>;
  return (
    <div className="space-y-3">
      <AHead kicker="Yönetim" title="Webhook olayları" />
      <div className="flex flex-wrap gap-1">
        <Link href="/krtf1krtf/webhooklar" className={`px-2.5 py-1.5 text-[12.5px] font-semibold ${!sp.t ? 'bg-ink text-white' : 'bg-white hover:bg-paper-3'}`}>Tümü</Link>
        {types.map((t) => <Link key={t.type} href={href('/krtf1krtf/webhooklar', params, { t: t.type, page: undefined })} className={`px-2.5 py-1.5 text-[12.5px] font-semibold ${sp.t === t.type ? 'bg-ink text-white' : 'bg-white hover:bg-paper-3'}`}>{t.type} <span className="num opacity-60">{t._count}</span></Link>)}
      </div>
      <Filters reset="/krtf1krtf/webhooklar">
        {sp.t && <input type="hidden" name="t" value={sp.t} />}
        <label className="flex flex-col"><span className="label">Ara</span><input name="q" defaultValue={sp.q} placeholder="webhook-id, ödeme ya da sipariş kimliği" className={`${fieldSm} w-72`} /></label>
      </Filters>
      <div className="divide-y divide-ink/5 bg-white">
        {rows.map((e) => {
          const d = (e.payload as { data?: { payment_id?: string; total_amount?: number; currency?: string; metadata?: Record<string, string> } }).data || {};
          return (
            <details key={e.id} className="px-4 py-2.5 text-[13px]">
              <summary className="flex cursor-pointer flex-wrap items-center gap-x-4 gap-y-1">
                <b className={e.type.includes('failed') || e.type.includes('cancel') ? 'text-survey-dark' : ''}>{e.type}</b>
                <span className="num text-[12px] text-ink-soft">{dt(e.createdAt)}</span>
                {d.payment_id && <span className="font-mono text-[11.5px]">{d.payment_id}</span>}
                {d.total_amount != null && <span className="num">{(d.total_amount / 100).toLocaleString('tr-TR')} {d.currency}</span>}
                {d.metadata?.orderId && <Link href={`/krtf1krtf/siparisler/${d.metadata.orderId}`} className="text-[12px] underline">sipariş</Link>}
                {d.metadata?.userId && <Link href={`/krtf1krtf/kullanicilar/${d.metadata.userId}`} className="text-[12px] underline">kullanıcı</Link>}
              </summary>
              <pre className="mt-2 max-h-96 overflow-auto bg-paper-2 p-2 text-[11.5px]">{JSON.stringify(e.payload, null, 2)}</pre>
              <p className="mt-1 font-mono text-[11px] text-ink-soft">webhook-id: {e.id}</p>
            </details>
          );
        })}
        {!rows.length && <p className="px-4 py-6 text-center text-[13px] text-ink-soft">Olay yok.</p>}
      </div>
      <Pager page={pg} total={total} size={PAGE} link={(p) => href('/krtf1krtf/webhooklar', params, { page: p })} />
    </div>
  );
}
