"use client";

import type { ColumnDef } from "@tanstack/react-table";
import Link from "next/link";

import { DashboardMasterRowActions } from "@/app/dashboard/_components/dashboard-master-row-actions";
import { Badge } from "@/components/ui/badge";

import type { BankHolidayRow } from "./schema";

const DELETE_HREF = "/dashboard/master/bank-holidays/delete";

function BankHolidayActions({ row }: { row: BankHolidayRow }) {
  return (
    <DashboardMasterRowActions
      editHref={`/dashboard/master/bank-holidays/${row.id}`}
      editAriaLabel="Update bank holiday"
      deleteUrl={DELETE_HREF}
      entityId={row.id}
      entityName={row.name || row.holidayDate}
      entityLabel="bank holiday"
      fallbackError="Bank holiday could not be deleted."
      defaultSuccessMessage="Bank holiday deleted."
    />
  );
}

export const bankHolidayColumns: ColumnDef<BankHolidayRow>[] = [
  {
    accessorKey: "holidayDate",
    header: "Holiday date",
    cell: ({ row }) => (
      <Link
        href={`/dashboard/master/bank-holidays/${row.original.id}`}
        className="font-medium text-primary hover:underline tabular-nums"
      >
        {row.original.holidayDate}
      </Link>
    ),
  },
  {
    accessorKey: "name",
    header: "Name",
    cell: ({ row }) => (
      <span className="text-sm">{row.original.name || "—"}</span>
    ),
  },
  {
    accessorKey: "sourceLabel",
    header: "Source",
    cell: ({ row }) => (
      <Badge variant="outline" className="font-normal">
        {row.original.sourceLabel}
      </Badge>
    ),
  },
  {
    accessorKey: "createdAt",
    header: "Created",
    enableColumnFilter: false,
    cell: ({ row }) => (
      <span className="text-muted-foreground text-sm whitespace-nowrap">
        {row.original.createdAt || "—"}
      </span>
    ),
  },
  {
    id: "options",
    header: () => <span className="block w-full text-right">Options</span>,
    cell: ({ row }) => <BankHolidayActions row={row.original} />,
    enableSorting: false,
  },
];
