import { CalendarDays } from "lucide-react";

import { ListPageCard } from "@/app/dashboard/_components";
import { ErrorBanner } from "@/components/shared/error-banner";
import {
  masterFiltersToBackend,
  parseMasterListQuery,
} from "@/lib/server/parse-master-list-search-params";

import { BankHolidaysTable } from "./_components/bank-holidays-table";
import { BankHolidaysHeaderActions } from "./_components/list-header-actions";
import { parseBankHolidayFiltersFromSearchParams } from "./_components/schema";
import { fetchBackendBankHolidays } from "./_lib/bank-holidays-server-api";

type PageProps = {
  searchParams: Promise<Record<string, string | undefined>>;
};

export default async function BankHolidaysPage({ searchParams }: PageProps) {
  const query = await searchParams;
  const { page, pageSize, filters } = parseMasterListQuery(
    query,
    parseBankHolidayFiltersFromSearchParams,
  );
  const backendFilters = masterFiltersToBackend(filters);
  if (backendFilters.source === "all") {
    delete backendFilters.source;
  }

  const { rows, totalCount, pageCount, errorMessage } = await fetchBackendBankHolidays({
    page,
    pageSize,
    filters: backendFilters,
  });

  return (
    <ListPageCard
      icon={CalendarDays}
      title="Bank holidays"
      breadcrumb={[{ label: "Master" }, { label: "Bank holidays" }]}
      description="Manage global bank holiday dates. Import iCal (.ics) or Excel/CSV (date in column A, optional name in column B)."
      actions={<BankHolidaysHeaderActions />}
    >
      <ErrorBanner message={errorMessage} className="mb-4" />
      <BankHolidaysTable
        data={rows}
        initialFilters={filters}
        pagination={{ page, pageSize, totalCount, pageCount }}
      />
    </ListPageCard>
  );
}
