import {
  DataTableNumberCell,
  type DataTableColDef,
} from "@/components/ui/data-table";

import {
  ActionCell,
  AgencyCell,
  ReferenceCell,
  StatusBadge,
  TableText,
  NO_WG_ISSUE_ACTION_ACCESS,
  type WgIssueActionAccess,
  type WgIssueActionHandlers,
} from "@/features/pswg/working-group-issues/components/table/wg-issues-table-cells";
import type {
  IssueRow,
  IssueStatus,
} from "@/features/pswg/working-group-issues/wg-issues-data";
import {
  tWgIssues,
  translateWgIssuesText,
  type WgIssuesLanguage,
} from "@/features/pswg/working-group-issues/wg-issues-i18n";

export function getWgIssuesTableColumns(
  language: WgIssuesLanguage,
  handlers: WgIssueActionHandlers = {},
  access: WgIssueActionAccess = NO_WG_ISSUE_ACTION_ACCESS,
): DataTableColDef<IssueRow>[] {
  return [
    {
      field: "id",
      headerName: tWgIssues(language, "no"),
      width: 80,
      minWidth: 72,
      align: "center",
      headerAlign: "center",
      renderCell: (params) => (
        <DataTableNumberCell value={params.value} />
      ),
    },
    {
      field: "issue",
      headerName: tWgIssues(language, "issue"),
      width: 300,
      headerAlign: "center",
      renderCell: (params) => <TableText value={String(params.value)} />,
    },
    {
      field: "category",
      headerName: tWgIssues(language, "issueCategory"),
      width: 150,
      headerAlign: "center",
      renderCell: (params) => (
        <TableText
          value={translateWgIssuesText(language, String(params.value))}
        />
      ),
    },
    {
      field: "description",
      headerName: tWgIssues(language, "issueDescription"),
      width: 400,
      headerAlign: "center",
      renderCell: (params) => (
        <TableText
          value={translateWgIssuesText(language, String(params.value))}
        />
      ),
    },
    {
      field: "recommendation",
      headerName: tWgIssues(language, "recommendation"),
      width: 400,
      headerAlign: "center",
      renderCell: (params) => (
        <TableText
          value={translateWgIssuesText(language, String(params.value))}
        />
      ),
    },
    {
      field: "governmentDecision",
      headerName: tWgIssues(language, "governmentDecision"),
      width: 400,
      headerAlign: "center",
      renderCell: (params) => (
        <TableText
          value={translateWgIssuesText(language, String(params.value))}
        />
      ),
    },
    {
      field: "status",
      headerName: tWgIssues(language, "status"),
      width: 150,
      align: "center",
      headerAlign: "center",
      renderCell: (params) => (
        <StatusBadge
          status={params.value as IssueStatus}
          language={language}
        />
      ),
    },
    {
      field: "primaryAgency",
      headerName: tWgIssues(language, "primaryAgency"),
      width: 250,
      headerAlign: "center",
      renderCell: (params) => (
        <AgencyCell
          agency={String(params.value)}
          logo={params.row.primaryAgencyLogo}
        />
      ),
    },
    {
      field: "issueReference",
      headerName: tWgIssues(language, "issueReference"),
      width: 210,
      minWidth: 210,
      headerAlign: "center",
      renderCell: (params) => (
        <ReferenceCell label={params.value as string | undefined} />
      ),
    },
    {
      field: "solutionReference",
      headerName: tWgIssues(language, "solutionReference"),
      width: 220,
      minWidth: 220,
      headerAlign: "center",
      renderCell: (params) => (
        <ReferenceCell label={params.value as string | undefined} />
      ),
    },
    {
      field: "action",
      headerName: tWgIssues(language, "action"),
      width: 100,
      align: "center",
      headerAlign: "center",
      sortable: false,
      filterable: false,
      renderCell: (params) => (
        <ActionCell
          access={access}
          row={params.row}
          language={language}
          {...handlers}
        />
      ),
    },
  ];
}
