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

import {
  DataTableDateCell,
  DataTableNumberCell,
} from "@/components/ui/data-table";
import type { MeetingCalendarRow } from "../../meeting-calendar-data";
import {
  MeetingCalendarActionCell,
  MeetingCalendarDocumentCell,
  MeetingCalendarIssueCell,
  MeetingCalendarStatusCell,
  MeetingCalendarTextCell,
} from "./ministry-meeting-calendar-table-cells";

type MeetingCalendarTableActions = {
  onView?: (row: MeetingCalendarRow) => void;
  onEdit?: (row: MeetingCalendarRow) => void;
  onCreateMeetingSummary?: (row: MeetingCalendarRow) => void;
};

export function getMeetingCalendarColumns(
  actions: MeetingCalendarTableActions = {},
): GridColDef<MeetingCalendarRow>[] {
  return [
    {
      field: "id",
      headerName: "No.",
      width: 72,
      minWidth: 72,
      align: "center",
      headerAlign: "center",
      sortable: false,
      filterable: false,
      renderCell: (params) => (
        <DataTableNumberCell
          value={
            params.api.getRowIndexRelativeToVisibleRows(params.row.id) + 1
          }
        />
      ),
    },
    {
      field: "title",
      headerName: "Meeting Title",
      width: 316,
      renderCell: (params) => (
        <MeetingCalendarTextCell value={params.row.title} khmer />
      ),
    },
    {
      field: "workingGroup",
      headerName: "Working Group Name",
      width: 271,
      renderCell: (params) => (
        <MeetingCalendarTextCell value={params.row.workingGroup} />
      ),
    },
    {
      field: "description",
      headerName: "Description",
      width: 529,
      renderCell: (params) => (
        <MeetingCalendarTextCell value={params.row.description} khmer />
      ),
    },
    {
      field: "issueCount",
      headerName: "# of Issues",
      width: 193,
      renderCell: (params) => (
        <MeetingCalendarIssueCell count={params.row.issueCount} />
      ),
    },
    {
      field: "meetingRequest",
      headerName: "Meeting Request",
      width: 161,
      align: "center",
      headerAlign: "center",
      renderCell: (params) => (
        <MeetingCalendarDocumentCell label={params.row.meetingRequest} />
      ),
    },
    {
      field: "meetingDate",
      headerName: "WG Meeting Date",
      width: 174,
      renderCell: (params) => (
        <DataTableDateCell value={params.row.meetingDate} align="left" />
      ),
    },
    {
      field: "timeRange",
      headerName: "Start & End Time",
      width: 200,
      minWidth: 190,
      renderCell: (params) => (
        <MeetingCalendarTextCell value={params.row.timeRange} wrap />
      ),
    },
    {
      field: "status",
      headerName: "Status",
      width: 160,
      renderCell: (params) => (
        <MeetingCalendarStatusCell status={params.row.status} />
      ),
    },
    {
      field: "action",
      headerName: "Action",
      width: 100,
      minWidth: 100,
      align: "center",
      headerAlign: "center",
      sortable: false,
      filterable: false,
      disableColumnMenu: true,
      renderCell: (params) => (
        <MeetingCalendarActionCell
          row={params.row}
          onView={actions.onView}
          onEdit={actions.onEdit}
          onCreateMeetingSummary={actions.onCreateMeetingSummary}
        />
      ),
    },
  ];
}
