import type { Metadata } from "next";
import Link from "next/link";

import { GlassCard } from "@/components/shared/glass-card";
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table";
import { listRegisteredUsersPage } from "@/lib/db/store";

export const dynamic = "force-dynamic";

export const metadata: Metadata = {
  title: "Admin · Users",
  robots: { index: false, follow: false },
};

function pageFromSearchParams(value: string | string[] | undefined) {
  const raw = Array.isArray(value) ? value[0] : value;
  const page = Number(raw ?? "1");
  return Number.isFinite(page) ? Math.max(1, Math.floor(page)) : 1;
}

function pageHref(page: number) {
  return `/admin/users?page=${page}`;
}

export default async function AdminUsersPage({
  searchParams,
}: {
  searchParams?: Promise<Record<string, string | string[] | undefined>>;
}) {
  const params = await searchParams;
  const result = await listRegisteredUsersPage(pageFromSearchParams(params?.page), 50);
  const users = result.items;

  return (
    <div className="space-y-6">
      <div>
        <h1 className="font-display text-3xl text-white">USERS</h1>
        <p className="mt-2 text-xs text-muted-foreground">
          Showing {users.length} of {result.total} users.
        </p>
      </div>
      <GlassCard className="overflow-x-auto p-0">
        <Table>
          <TableHeader>
            <TableRow>
              <TableHead>Name</TableHead>
              <TableHead>Email</TableHead>
              <TableHead>Role</TableHead>
            </TableRow>
          </TableHeader>
          <TableBody>
            {users.map((u) => (
              <TableRow key={u.email}>
                <TableCell>{u.name}</TableCell>
                <TableCell>{u.email}</TableCell>
                <TableCell>{u.role}</TableCell>
              </TableRow>
            ))}
          </TableBody>
        </Table>
      </GlassCard>
      {result.totalPages > 1 ? (
        <div className="flex items-center justify-between text-sm">
          <Link
            href={pageHref(Math.max(1, result.page - 1))}
            aria-disabled={result.page <= 1}
            className="rounded-lg border border-white/10 px-3 py-2 text-muted-foreground aria-disabled:pointer-events-none aria-disabled:opacity-40"
          >
            Previous
          </Link>
          <span className="text-muted-foreground">
            Page {result.page} of {result.totalPages}
          </span>
          <Link
            href={pageHref(Math.min(result.totalPages, result.page + 1))}
            aria-disabled={result.page >= result.totalPages}
            className="rounded-lg border border-white/10 px-3 py-2 text-muted-foreground aria-disabled:pointer-events-none aria-disabled:opacity-40"
          >
            Next
          </Link>
        </div>
      ) : null}
    </div>
  );
}
