import { redirect } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { getOrderList } from "@/lib/orderList";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { StatCard } from "@/components/admin/StatCard";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { AdminOrderSortSelect } from "@/components/admin/AdminOrderSortSelect";
import { AdminOrderSearchBox } from "@/components/admin/AdminOrderSearchBox";
import { AdminArchiveToggle } from "@/components/admin/AdminArchiveToggle";
import { AdminPagination } from "@/components/admin/AdminPagination";
import { OrdersBulkList } from "@/components/admin/OrdersBulkList";

export const dynamic = "force-dynamic";

export default async function AdminOrdersPage({
  searchParams,
}: {
  searchParams: Promise<{ sort?: string; q?: string; archived?: string; page?: string }>;
}) {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");

  if (!(await hasPermission("orders_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  const { sort = "newest", q = "", archived, page: pageParam } = await searchParams;
  const showArchived = archived === "true";
  const page = Math.max(1, parseInt(pageParam || "1", 10) || 1);

  const { orders, totalPages, totalActive, totalRejected, openPayments } = await getOrderList({
    sort,
    q,
    archived: showArchived,
    page,
  });

  function buildHref(targetPage: number) {
    const params = new URLSearchParams();
    if (sort !== "newest") params.set("sort", sort);
    if (q) params.set("q", q);
    if (showArchived) params.set("archived", "true");
    if (targetPage > 1) params.set("page", String(targetPage));
    const qs = params.toString();
    return `/de/admin/orders${qs ? `?${qs}` : ""}`;
  }

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader title="Aufträge" />

      <div className="grid grid-cols-2 sm:grid-cols-4 gap-3 mb-8">
        <StatCard label="Insgesamt (aktiv)" value={totalActive + totalRejected} />
        <StatCard label="Offen" value={totalActive} accent="emerald" />
        <StatCard label="Offene Zahlungen" value={openPayments} accent={openPayments ? "red" : "muted"} />
        <StatCard label="Abgelehnt" value={totalRejected} accent={totalRejected ? "red" : "muted"} />
      </div>

      <div className="flex flex-wrap items-center gap-3 mb-6">
        <AdminOrderSearchBox />
        <AdminArchiveToggle />
        <AdminOrderSortSelect />
        {permissions.orders_create && (
          <a
            href="/de/admin/orders/new"
            className="text-xs border border-white/30 rounded-lg px-3.5 py-1.5 hover:border-white transition-colors"
          >
            + Neuer Auftrag für Kunden
          </a>
        )}
      </div>

      {orders.length === 0 ? (
        <AdminEmptyState message={q ? "Keine Treffer." : showArchived ? "Noch nichts archiviert." : "Noch keine Aufträge."} />
      ) : (
        <>
          <OrdersBulkList orders={orders} showArchived={showArchived} />
          <AdminPagination page={page} totalPages={totalPages} buildHref={buildHref} />
        </>
      )}
    </main>
  );
}
