"use client"

import type { ColumnDef, FilterFn } from "@tanstack/react-table"

import type { CurrencyConversionRow } from "./schema"

const includesStringFilter: FilterFn<CurrencyConversionRow> = (
  row,
  columnId,
  value
) => {
  if (!value) return true
  const raw = row.getValue(columnId)
  return String(raw ?? "")
    .toLowerCase()
    .includes(String(value).toLowerCase())
}

function formatRate(rate: number): string {
  return rate.toFixed(6)
}

export function createCurrencyConversionColumns(): ColumnDef<CurrencyConversionRow>[] {
  return [
    {
      accessorKey: "srNo",
      header: "Sr no",
      filterFn: includesStringFilter,
      cell: ({ row }) => (
        <span className="tabular-nums text-sm">{row.original.srNo}</span>
      ),
    },
    {
      accessorKey: "isin",
      header: "ISIN",
      filterFn: includesStringFilter,
      cell: ({ row }) => (
        <span className="font-mono text-sm">{row.original.isin}</span>
      ),
    },
    {
      accessorKey: "name",
      header: "Name",
      filterFn: includesStringFilter,
    },
    {
      accessorKey: "fromCurrency",
      header: "From",
      filterFn: includesStringFilter,
    },
    {
      accessorKey: "toCurrency",
      header: "To",
      filterFn: includesStringFilter,
    },
    {
      accessorKey: "conversionRate",
      header: "Rate",
      filterFn: includesStringFilter,
      cell: ({ row }) => formatRate(row.original.conversionRate),
    },
    {
      accessorKey: "conversionRateCurrency",
      header: "Rate CCY",
      filterFn: includesStringFilter,
    },
    {
      accessorKey: "dataUpdateDate",
      header: "Data update date",
      filterFn: includesStringFilter,
    },
    {
      accessorKey: "conversionRateDate2",
      header: "Conversion rate date",
      filterFn: includesStringFilter,
    },
  ]
}
