"use client";

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

import { Button } from "@/components/ui/button";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";

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

const LIST_BASE = "/dashboard/master-table/structure-master";

type ColumnOptions = {
  onViewDetails: (row: StructureMasterRow) => void;
};

export function createStructureMasterColumns({
  onViewDetails,
}: ColumnOptions): ColumnDef<StructureMasterRow>[] {
  return [
    {
      accessorKey: "isin",
      header: "ISIN",
      cell: ({ row }) => (
        <div className="min-w-[160px]">
          <span className="font-mono text-sm font-medium">{row.original.isin}</span>
          {row.original.firstObservationDate ? (
            <p className="mt-0.5 text-muted-foreground text-[11px]">
              First obs: {row.original.firstObservationDate}
            </p>
          ) : null}
        </div>
      ),
    },
    {
      accessorKey: "name",
      header: "Name",
      cell: ({ row }) => <span className="text-sm">{row.original.name}</span>,
    },
    {
      accessorKey: "tradeDate",
      header: "Trade date",
      enableColumnFilter: false,
      cell: ({ row }) => (
        <span className="text-muted-foreground text-sm whitespace-nowrap">
          {row.original.tradeDate ?? "—"}
        </span>
      ),
    },
    {
      accessorKey: "finalValuationDate",
      header: "Final valuation date",
      enableColumnFilter: false,
      cell: ({ row }) => (
        <span className="text-muted-foreground text-sm whitespace-nowrap">
          {row.original.finalValuationDate ?? "—"}
        </span>
      ),
    },
    {
      id: "more",
      header: "More",
      enableColumnFilter: false,
      cell: ({ row }) => (
        <Button
          type="button"
          variant="secondary"
          size="sm"
          onClick={() => onViewDetails(row.original)}
        >
          View details
        </Button>
      ),
    },
    {
      id: "options",
      header: () => <span className="block w-full text-right">Options</span>,
      enableColumnFilter: false,
      cell: ({ row }) => (
        <div className="flex justify-end">
          <Tooltip>
            <TooltipTrigger asChild>
              <Button variant="secondary" size="icon-sm" className="size-7" asChild>
                <Link
                  href={`${LIST_BASE}/create?id=${row.original.id}`}
                  aria-label="Update structure"
                >
                  <Pencil className="size-3.5" />
                </Link>
              </Button>
            </TooltipTrigger>
            <TooltipContent>Update</TooltipContent>
          </Tooltip>
        </div>
      ),
      enableSorting: false,
    },
  ];
}
