"use client";

import type { ComponentType } from "react";

import { AlertCircle } from "lucide-react";
import type { ColumnDef } from "@tanstack/react-table";

import { ListPageCard } from "@/app/dashboard/_components";
import { useClearFiltersRefresh } from "@/app/dashboard/_components/data-table";
import { ErrorBanner } from "@/components/shared/error-banner";

import type { MissingMasterFilters, MissingMasterRouteState } from "./missing-master-route";
import type { MissingMasterRow } from "./missing-master-schema";
import { MissingMasterTable } from "./missing-master-table";

type Props<TRow extends MissingMasterRow> = {
  rows: TRow[];
  columns: ColumnDef<TRow>[];
  filters: MissingMasterFilters;
  totalCount: number;
  page: number;
  pageSize: number;
  pageCount: number;
  errorMessage?: string | null;
  listHref: string;
  buildHref: (state: Partial<MissingMasterRouteState>) => string;
  idPrefix: string;
  title: string;
  description: string;
  breadcrumbLabel: string;
  HeaderActions: ComponentType<{ isRefreshing?: boolean; onRefresh?: () => void }>;
};

/** Page shell shared by the "missing <X> master" list pages. */
export function MissingMasterPageClient<TRow extends MissingMasterRow>({
  rows,
  columns,
  filters,
  totalCount,
  page,
  pageSize,
  pageCount,
  errorMessage = null,
  listHref,
  buildHref,
  idPrefix,
  title,
  description,
  breadcrumbLabel,
  HeaderActions,
}: Props<TRow>) {
  const { resetKey, isRefreshing, onRefresh } = useClearFiltersRefresh({
    clearToHref: listHref,
  });

  return (
    <ListPageCard
      icon={AlertCircle}
      title={title}
      description={description}
      breadcrumb={[{ label: "Master Table" }, { label: breadcrumbLabel }]}
      actions={<HeaderActions isRefreshing={isRefreshing} onRefresh={onRefresh} />}
    >
      <ErrorBanner message={errorMessage} className="mb-4" />
      <MissingMasterTable
        key={resetKey}
        data={rows}
        columns={columns}
        filters={filters}
        totalCount={totalCount}
        page={page}
        pageSize={pageSize}
        pageCount={pageCount}
        buildHref={buildHref}
        idPrefix={idPrefix}
      />
    </ListPageCard>
  );
}
