import Link from "next/link";

interface PaginationProps {
  page: number;
  totalPages: number;
  buildHref: (page: number) => string;
}

/** Accessible prev/next pagination preserving current filters. */
export function Pagination({ page, totalPages, buildHref }: PaginationProps) {
  if (totalPages <= 1) return null;
  return (
    <nav
      aria-label="Pagination"
      className="mt-10 flex items-center justify-center gap-3"
    >
      {page > 1 ? (
        <Link
          href={buildHref(page - 1)}
          className="inline-flex h-10 items-center rounded-xl border border-slate-700 bg-slate-900 px-4 text-sm font-semibold text-slate-200 hover:border-slate-500"
        >
          ← Previous
        </Link>
      ) : (
        <span
          aria-disabled="true"
          className="inline-flex h-10 items-center rounded-xl border border-slate-800 px-4 text-sm font-semibold text-slate-600"
        >
          ← Previous
        </span>
      )}
      <p className="text-sm text-slate-400" aria-live="polite">
        Page <span className="font-semibold text-white">{page}</span> of{" "}
        <span className="font-semibold text-white">{totalPages}</span>
      </p>
      {page < totalPages ? (
        <Link
          href={buildHref(page + 1)}
          className="inline-flex h-10 items-center rounded-xl border border-slate-700 bg-slate-900 px-4 text-sm font-semibold text-slate-200 hover:border-slate-500"
        >
          Next →
        </Link>
      ) : (
        <span
          aria-disabled="true"
          className="inline-flex h-10 items-center rounded-xl border border-slate-800 px-4 text-sm font-semibold text-slate-600"
        >
          Next →
        </span>
      )}
    </nav>
  );
}

/** Build a query-string href from parts, skipping empty values. */
export function withQuery(
  base: string,
  params: Record<string, string | undefined>,
): string {
  const search = new URLSearchParams();
  for (const [key, value] of Object.entries(params)) {
    if (value !== undefined && value !== "") search.set(key, value);
  }
  const qs = search.toString();
  return qs ? `${base}?${qs}` : base;
}
