import { redirect } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { LogFilters } from "@/components/admin/LogFilters";
import { LogList } from "@/components/admin/LogList";
import { getLogFeed, normalizeCategory, normalizeRange } from "@/lib/logFeed";

export const dynamic = "force-dynamic";

const PAGE_SIZE = 60;

export default async function AdminLogsPage({
  searchParams,
}: {
  searchParams: Promise<{ cat?: string; range?: string; page?: string }>;
}) {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Flogs");
  if (!(await hasPermission("logs"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  const sp = await searchParams;
  const category = normalizeCategory(sp.cat);
  const range = normalizeRange(sp.range);
  const requestedPage = Math.max(1, Number(sp.page) || 1);

  const { rows, total, page, pageCount, counts, capped } = await getLogFeed({
    category,
    range,
    page: requestedPage,
    pageSize: PAGE_SIZE,
  });

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Systemprotokoll"
        subtitle="Fehler und Aktivitäten der letzten 90 Tage, nach Kategorie sortiert. Ältere Einträge werden automatisch entfernt."
      />

      <LogFilters category={category} range={range} counts={counts} total={total} capped={capped} />

      {rows.length === 0 ? (
        <AdminEmptyState message="Keine Einträge im gewählten Zeitraum." />
      ) : (
        <LogList rows={rows} category={category} range={range} page={page} pageCount={pageCount} />
      )}
    </main>
  );
}
