import Link from "next/link";
import { FOCUS_RING_CLASSES } from "@/components/ui/styles";
import { cn } from "@/lib/utils";

interface PaginationMeta {
  current_page: number;
  last_page: number;
}

/**
 * Prev/next pager for `PaginatedResponse` list pages — pure Server Component
 * (native `<Link>`s carrying the `page` query param), no client JS needed.
 * Preserves any other filter params already on the page via `searchParams`.
 */
export function Pagination({
  meta,
  basePath,
  searchParams = {},
}: {
  meta: PaginationMeta;
  basePath: string;
  searchParams?: Record<string, string | undefined>;
}) {
  if (meta.last_page <= 1) return null;

  function hrefForPage(page: number) {
    const params = new URLSearchParams();
    for (const [key, value] of Object.entries(searchParams)) {
      if (value) params.set(key, value);
    }
    params.set("page", String(page));
    return `${basePath}?${params}`;
  }

  const canPrev = meta.current_page > 1;
  const canNext = meta.current_page < meta.last_page;

  return (
    <nav aria-label="Page navigation" className="mt-6 flex items-center justify-between text-sm">
      <Link
        href={hrefForPage(meta.current_page - 1)}
        aria-disabled={!canPrev}
        tabIndex={canPrev ? undefined : -1}
        className={cn(
          "rounded-lg border border-kolabora-neutral-dark/20 px-4 py-2 font-medium hover:bg-kolabora-neutral-dark/5",
          FOCUS_RING_CLASSES,
          !canPrev && "pointer-events-none opacity-40",
        )}
      >
        &larr; Previous
      </Link>
      <span className="text-kolabora-neutral-dark/70">
        Page {meta.current_page} of {meta.last_page}
      </span>
      <Link
        href={hrefForPage(meta.current_page + 1)}
        aria-disabled={!canNext}
        tabIndex={canNext ? undefined : -1}
        className={cn(
          "rounded-lg border border-kolabora-neutral-dark/20 px-4 py-2 font-medium hover:bg-kolabora-neutral-dark/5",
          FOCUS_RING_CLASSES,
          !canNext && "pointer-events-none opacity-40",
        )}
      >
        Next &rarr;
      </Link>
    </nav>
  );
}
