import {
  MyButtons,
  MyColumns,
  MyProTableProps,
  MyTableActions,
  MyToolBarActions,
} from '@/common';
import { Selects } from '@/components/Select';
import { Apis } from '@/gen/Apis';
import {
  HouseWorkOrdersAssignStatusEnum,
  HouseWorkOrdersLevelEnum,
  HouseWorkOrdersLocationEnum,
  HouseWorkOrdersTypeEnum,
} from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import WorkOrderAssign from '../list/modals/WorkOrderAssign';
import WorkOrderCreate from '../list/modals/WorkOrderCreate';
import WorkOrderShow from '../list/modals/WorkOrderShow';
import WorkOrderUpdate from '../list/modals/WorkOrderUpdate';

export const RenovationWorkOrdersStatusEnum = {
  Pending: { text: '待处理', color: '#FFA500', value: 'Pending' },
  Processing: { text: '处理中', color: '#1E90FF', value: 'Processing' },
  Completed: { text: '已完成', color: '#28A745', value: 'Completed' },
  Closed: { text: '已关闭', color: '#6C757D', value: 'Closed' },
};

export default function PatrolWorkIndex({ title = '巡更工单' }) {
  return (
    <ProTable<Record<any, any>>
      {...MyProTableProps.props}
      headerTitle={title}
      request={async (params, sort) => {
        return MyProTableProps.request(
          {
            ...params,
            type: [HouseWorkOrdersTypeEnum.SecurityInspection.value],
          },
          sort,
          Apis.WorkOrder.HouseWorkOrders.List,
        );
      }}
      toolBarRender={(action) => [
        <MyToolBarActions
          key="toolbar"
          actions={{
            create: (
              <WorkOrderCreate
                key="Create"
                reload={action?.reload}
                title={title}
                item={
                  {
                    // typeEnum: WorkTypeEnum,
                  }
                }
              />
            ),
          }}
        />,
      ]}
      columns={[
        MyColumns.ID({ search: false }),
        Selects?.AssetProjects({
          title: '选择项目',
          key: 'asset_projects_id',
          hidden: true,
        }),
        MyColumns.EnumTag({
          title: '处理状态',
          dataIndex: 'status',
          valueEnum: RenovationWorkOrdersStatusEnum,
        }),
        {
          title: '项目名称',
          dataIndex: 'project_name',
          hidden: true,
        },
        MyColumns.EnumTag({
          title: '分配状态',
          dataIndex: 'assign_status',
          valueEnum: HouseWorkOrdersAssignStatusEnum,
        }),
        MyColumns.EnumTag({
          title: '工单类型',
          dataIndex: 'type',
          valueEnum: HouseWorkOrdersTypeEnum,
          search: false,
        }),
        MyColumns.EnumTag({
          title: '报修位置',
          dataIndex: 'location',
          valueEnum: HouseWorkOrdersLocationEnum,
          search: false,
        }),
        {
          title: '位置信息',
          dataIndex: ['asset_house', 'full_name'],
          render: (_, record) => {
            return (
              <Space>
                {record?.asset_house?.full_name
                  ? record?.asset_house?.full_name
                  : record?.asset_project?.name}
              </Space>
            );
          },
          search: {
            transform: (value) => {
              return { house_name: value };
            },
          },
        },
        {
          title: '工单描述',
          dataIndex: 'content',
          search: false,
          width: 120,
          render: (text) => (
            <div
              style={{
                width: '100%',
                overflow: 'hidden',
                textOverflow: 'ellipsis',
                display: '-webkit-box',
                WebkitBoxOrient: 'vertical',
                WebkitLineClamp: 1,
              }}
            >
              {text}
            </div>
          ),
        },
        MyColumns.EnumTag({
          title: '优先级',
          dataIndex: 'level',
          valueEnum: HouseWorkOrdersLevelEnum,
          search: false,
        }),

        {
          title: '处理人',
          dataIndex: ['assign_employee', 'name'],
          search: false,
          render: (_, record) => {
            return `${record?.assign_employee?.name || ''}-${
              record?.assign_employee?.phone || ''
            }`;
          },
        },
        MyColumns.CreatedAt(),
        MyColumns.Option({
          render: (_, item: any, __, action) => (
            <MyTableActions
              actions={{
                show: (
                  <WorkOrderShow
                    item={item}
                    title="详情"
                    reload={action?.reload}
                  />
                ),
                assign:
                  item.assign_status === 'Unassigned' &&
                  item.type !== 'SecurityInspection' ? (
                    <WorkOrderAssign
                      item={item}
                      reload={action?.reload}
                      title="指派"
                    />
                  ) : null,
                update:
                  item.status === 'Pending' ? (
                    <WorkOrderUpdate
                      item={{
                        ...item,
                        // typeEnum: WorkTypeEnum,
                      }}
                      reload={action?.reload}
                      title={title}
                    />
                  ) : null,
                delete: (
                  <MyButtons.Delete
                    onConfirm={() =>
                      Apis.WorkOrder.HouseWorkOrders.SoftDelete({
                        id: item.id,
                      }).then(() => action?.reload())
                    }
                  />
                ),
              }}
              path="MyDecorationWorkorder"
            />
          ),
        }),
      ]}
    />
  );
}
