"use client";

import { ColumnDef } from "@tanstack/react-table";
import { Badge } from "@/components/ui/badge";
import { format } from "date-fns";
import { IUser } from "@/types/user/users";
import { DataTableColumnHeader } from "@/components/data-table/datatable-header";
import ActionsDropDown from "./actions-dropdown";
import { UserRoles, UserStatus } from "@/enum/user";
import { capitalizeFirstLetter } from "@/lib/format";
import { Checkbox } from "@/components/ui/checkbox";

export const AdminColumns: ColumnDef<IUser>[] = [
  {
    id: "select",
    header: ({ table }) => (
      <Checkbox
        checked={
          table.getIsAllPageRowsSelected() ||
          (table.getIsSomePageRowsSelected() && "indeterminate")
        }
        onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}
        aria-label="Select all"
      />
    ),
    cell: ({ row }) => (
      <Checkbox
        checked={row.getIsSelected()}
        onCheckedChange={(value) => row.toggleSelected(!!value)}
        aria-label="Select row"
      />
    ),
    enableSorting: false,
    enableHiding: false,
  },
  {
    accessorKey: "name",
    enableSorting: true,
    header: ({ column }) => (
      <DataTableColumnHeader column={column} title="Name" />
    ),
  },
  {
    accessorKey: "email",
    enableSorting: true,
    header: ({ column }) => (
      <DataTableColumnHeader column={column} title="Email" />
    ),
  },
  {
    accessorKey: "role",
    enableSorting: true,
    header: ({ column }) => (
      <DataTableColumnHeader column={column} title="Role" />
    ),
    cell: ({ row }) => (
      <Badge
        variant={(() => {
          switch (row.original.role) {
            case UserRoles.ADMIN:
              return "secondary";
            case UserRoles.OPERATOR:
              return "default";
            case UserRoles.SCANNER:
              return "outline";
            default:
              return "secondary";
          }
        })()}
      >
        {capitalizeFirstLetter(row.original.role, true)}
      </Badge>
    ),
  },
  {
    accessorKey: "status",
    enableSorting: true,
    header: ({ column }) => (
      <DataTableColumnHeader column={column} title="Status" />
    ),
    cell: ({ row }) => (
      <Badge
        variant={
          row.original.status === UserStatus.ACTIVE ? "default" : "destructive"
        }
      >
        {row.original.status === UserStatus.ACTIVE ? "Active" : "Inactive"}
      </Badge>
    ),
  },
  {
    accessorKey: "createdAt",
    enableSorting: true,
    sortingFn: "datetime",
    header: ({ column }) => (
      <DataTableColumnHeader
        column={column}
        title="Registered Date"
        ascPlaceholder="Order by Oldest"
        descPlaceholder="Order by Newest"
      />
    ),
    cell: ({ row }) => {
      const date = row.original.createdAt;
      if (!date) return "N/A";
      return format(new Date(date), "PPP");
    },
  },
  {
    id: "actions",
    enableSorting: false,
    cell: ({ row }) => {
      const user = row.original;

      return <ActionsDropDown user={user} />;
    },
  },
];

export type TableColumnKeys = keyof IUser;
export type TableColumnValues = IUser[TableColumnKeys];
