import type { GridColDef } from "@mui/x-data-grid";

import {
  DataTableDateCell,
  DataTableNumberCell,
} from "@/components/ui/data-table";
import { RoleActionCell } from "@/features/role/components/table/role-table-cells";
import type { Role } from "@/features/role/role-data";

type RoleTableHandlers = {
  onView: (role: Role) => void;
  onEdit: (role: Role) => void;
  onDelete: (role: Role) => void;
};

export function getRoleTableColumns({
  onView,
  onEdit,
  onDelete,
}: RoleTableHandlers): GridColDef<Role>[] {
  return [
    {
      field: "id",
      headerName: "No.",
      width: 90,
      align: "center",
      sortable: false,
      renderCell: (params) => <DataTableNumberCell value={params.value} />,
    },
    {
      field: "role",
      headerName: "Role Name",
      minWidth: 180,
      flex: 1,
      sortable: false,
    },
    {
      field: "guardName",
      headerName: "Guard Name",
      minWidth: 150,
      flex: 0.8,
      sortable: false,
    },
    {
      field: "status",
      headerName: "Status",
      minWidth: 150,
      flex: 0.8,
      sortable: false,
    },
    {
      field: "permissions",
      headerName: "Permissions",
      minWidth: 170,
      flex: 0.9,
      align: "center",
      sortable: false,
      renderCell: (params) => <DataTableNumberCell value={params.value} />,
    },
    {
      field: "resources",
      headerName: "Resources",
      minWidth: 160,
      flex: 0.9,
      align: "center",
      sortable: false,
      renderCell: (params) => <DataTableNumberCell value={params.value} />,
    },
    {
      field: "updated",
      headerName: "Updated",
      minWidth: 220,
      flex: 1.2,
      sortable: false,
      renderCell: (params) => <DataTableDateCell value={params.value} />,
    },
    {
      field: "actions",
      headerName: "",
      width: 72,
      align: "center",
      sortable: false,
      renderCell: (params) => (
        <RoleActionCell
          role={params.row}
          onView={onView}
          onEdit={onEdit}
          onDelete={onDelete}
        />
      ),
    },
  ];
}
