import { redirect } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { GiftVoucher } from "@/models/GiftVoucher";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { StatCard } from "@/components/admin/StatCard";
import { NewVoucherForm } from "@/components/admin/NewVoucherForm";
import { BulkVoucherForm } from "@/components/admin/BulkVoucherForm";
import { VoucherRow } from "@/components/admin/VoucherRow";

export const dynamic = "force-dynamic";

export default async function AdminVouchersPage() {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");
  if (!(await hasPermission("vouchers_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  await connectDB();
  const items = await GiftVoucher.find({}).sort({ createdAt: -1 }).lean();

  const outstandingCount = items.filter((v) => !v.paid && !v.cancelled).length;
  const activeValue = items
    .filter((v) => v.paid && !v.cancelled && !v.redeemed)
    .reduce((sum, v) => sum + v.amount, 0);
  const redeemedCount = items.filter((v) => v.redeemed).length;

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Gutscheine"
        subtitle="Geschenkgutscheine — online gekauft (Stripe) oder manuell ausgestellt. Einlösbar wie ein Rabattcode direkt am Auftrag."
      />

      {items.length > 0 && (
        <div className="grid grid-cols-3 gap-3 mb-8">
          <StatCard label="Offene Anfragen" value={outstandingCount} accent={outstandingCount ? "red" : "muted"} />
          <StatCard label="Im Umlauf" value={new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR" }).format(activeValue)} accent="emerald" />
          <StatCard label="Eingelöst" value={redeemedCount} />
        </div>
      )}

      <NewVoucherForm />
      <BulkVoucherForm />

      <div className="flex flex-col gap-3">
        {items.map((item) => (
          <VoucherRow
            key={String(item._id)}
            item={{
              id: String(item._id),
              code: item.code,
              amount: item.amount,
              purchaserName: item.purchaserName,
              purchaserEmail: item.purchaserEmail,
              recipientName: item.recipientName,
              message: item.message,
              paid: item.paid,
              paymentMethod: item.paymentMethod,
              cancelled: item.cancelled,
              redeemed: item.redeemed,
              createdAt: new Date(item.createdAt).toISOString(),
            }}
          />
        ))}
        {items.length === 0 && <AdminEmptyState message="Noch keine Gutschein-Anfragen." />}
      </div>
    </main>
  );
}
