/* eslint-disable react-hooks/exhaustive-deps */
/* 接单平台
 * @Author: Li Hanlin
 * @Date: 2022-12-05 10:13:42
 * @Last Modified by: Li Hanlin
 * @Last Modified time: 2023-02-08 13:23:20
 */

import * as React from 'react';
import { useState, useMemo, useRef, useEffect } from 'react';
import DrawerPro from '@/components/DrawerPro';
import AutoTable from '@/components/AutoTable';
import PremButton from '@/components/PremButton';
import getcolumns from './columns';
import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import OrderHandle from './RepairOrderHandle';
import { message } from 'antd';
import Detail from '@/components/RepaireDetail/Detail';
function Platform(props) {
  const actionRef = useRef(),
    formRef = useRef();
  const [drawer, setdrawer] = useState({
      open: false,
      SpecName: null,
    }),
    [activeTabKey, setactiveTabKey] = useState('1');

  const { run, loading } = useRequest(doFetch, {
    manual: true,
    onSuccess: (res, params) => {
      if (res?.code == '0000') {
        actionRef?.current?.reload();
        setdrawer((s) => ({
          ...s,
          open: false,
        }));
      }
    },
  });

  useEffect(async () => {
    let params = {};
    if (activeTabKey == '1') {
      params.businessSpecName = 'ORDER_RECEIVING_DISTRIBUTE';
    } else if (activeTabKey == '2') {
      params.businessSpecName = 'TRACKING_ORDER_DISTRIBUTE';
    } else if (activeTabKey == '3') {
      params.businessSpecName = 'TRANSFER_ORDER_DISTRIBUTE';
    }
    let res = await doFetch({
      url: '/base/pmBaseBusinessData/queryBySpecName',
      params,
    });
    setdrawer((s) => ({
      ...s,
      SpecName: res?.data?.data,
    }));
  }, [activeTabKey]);

  const detail = (text, row, _, action) => {
    return (
      <PremButton
        btn={{
          size: 'small',
          type: 'link',
          onClick: () => {
            setdrawer((s) => ({
              ...s,
              open: true,
              item: row,
              title: '详情',
              val: 'detail',
              title: '详细信息',
            }));
          },
        }}
      >
        详情
      </PremButton>
    );
  };

  // 接单按钮
  const receiveBtn = (text, row, _, action, activeTab) => {
    if (row?.status == 0 || row?.status == 1) {
      if (activeTab == '2') {
        // 追踪
        return (
          <PremButton
            btn={{
              size: 'small',
              type: 'primary',
              onClick: async () => {
                // setdrawer((s) => ({
                //   ...s,
                //   type: null,
                // }));
                //console.log('zzjd');
                let params = {
                  id: row?.id,
                };
                let res = await doFetch({
                  url: '/repair/umTrackOrder/orderReceiving',
                  params,
                });
                if (res.code === '0000') {
                  message.success('操作成功！');
                  setdrawer((s) => ({
                    ...s,
                    open: false,
                  }));
                  actionRef.current.reload();
                }
              },
            }}
          >
            接单
          </PremButton>
        );
      } else if (activeTab == '3') {
        return (
          <PremButton
            btn={{
              size: 'small',
              type: 'primary',
              onClick: async (vals) => {
                let params = {
                  id: row?.id,
                };
                let res = await doFetch({
                  url: '/repair/umOtherUnitsOrder/orderReceiving',
                  params,
                });
                if (res.code === '0000') {
                  message.success('操作成功！');
                  setdrawer((s) => ({
                    ...s,
                    open: false,
                  }));
                  actionRef.current.reload();
                }
              },
            }}
          >
            接单
          </PremButton>
        );
      } else if (activeTab == '1') {
        // 维修
        return (
          <PremButton
            btn={{
              size: 'small',
              type: 'primary',
              onClick: () => {
                setdrawer((s) => ({
                  ...s,
                  open: true,
                  item: row,
                  title: '接单',
                  val: 'only',
                  type: 'wxjd',
                }));
              },
            }}
          >
            接单
          </PremButton>
        );
      }
    } else {
      if (activeTab == '2') {
        return (
          <PremButton
            btn={{
              size: 'small',
              type: 'primary',
              onClick: () => {
                setdrawer((s) => ({
                  ...s,
                  open: true,
                  item: row,
                  title: '派单',
                  type: 'zzpd',
                  val: 'only',
                }));
              },
            }}
          >
            派单
          </PremButton>
        );
      } else if (activeTab == '1') {
        // 维修
        return (
          <PremButton
            btn={{
              size: 'small',
              type: 'primary',
              onClick: () => {
                setdrawer((s) => ({
                  ...s,
                  open: true,
                  item: row,
                  title: '派单',
                  type: 'wxpd',
                  val: 'only',
                }));
              },
            }}
          >
            派单
          </PremButton>
        );
      } else if (activeTab == '3') {
        return (
          <PremButton
            btn={{
              size: 'small',
              type: 'primary',
              onClick: () => {
                setdrawer((s) => ({
                  ...s,
                  open: true,
                  item: row,
                  title: '派单',
                  type: 'wpd',
                  val: 'only',
                }));
              },
            }}
          >
            派单
          </PremButton>
        );
      }
    }
  };

  const columns = useMemo(() => {
    let defcolumn = getcolumns(setdrawer, drawer?.SpecName?.businessData).filter(
      (it) => it.key == activeTabKey,
    )[0]?.columns;
    let defpath =
      getcolumns(setdrawer, drawer?.SpecName?.businessData).filter(
        (it) => it.key == activeTabKey,
      )[0]?.pathconfig ?? {};
    let actions = {
      title: '操作',
      valueType: 'option',
      width: 150,
      render: (text, row, _, action) => receiveBtn(text, row, _, action, activeTabKey),
    };
    return defcolumn.concat(actions);
  }, [activeTabKey]);

  const pathconfig = useMemo(() => {
    let defpath = getcolumns(setdrawer).filter((it) => it.key == activeTabKey)[0]?.pathconfig ?? {};
    return defpath;
  }, [activeTabKey]);

  function selectType(type) {
    switch (type) {
      case 'wxjd':
        return (
          <OrderHandle
            type="wxjd"
            id={drawer?.item.id}
            url={'/repair/umRepairOrder/orderReceiving'}
            actionRef={actionRef}
            setdrawer={setdrawer}
          />
        );
      case 'wxpd':
        return (
          <OrderHandle
            type="wxpd"
            actionRef={actionRef}
            setdrawer={setdrawer}
            id={drawer?.item.id}
            url={'/repair/umRepairOrder/dispatchById'}
          />
        );
      case 'zzpd':
        return (
          <OrderHandle
            type="zzpd"
            actionRef={actionRef}
            setdrawer={setdrawer}
            id={drawer?.item.id}
            url={'/repair/umTrackOrder/dispatchById'}
          />
        );
      case 'wpd':
        return (
          <OrderHandle
            type="wpd"
            setdrawer={setdrawer}
            actionRef={actionRef}
            id={drawer?.item.id}
            url={'/repair/umOtherUnitsOrder/dispatchById'}
          />
        );
      case 'detail_wxgd':
        return (
          <Detail
            title="维修单号"
            titleno={drawer?.item?.repairNo}
            detailpath="/repair/umRepairOperation/queryOperationList"
            params={{ repairOrderId: drawer?.item?.id }}
            baseRow={drawer?.item}
            basecolumns={[
              {
                title: '创建时间',
                dataIndex: 'createTimes',
                key: 'createTimes',
              },
              {
                title: '工单状态',
                dataIndex: 'statusName',
                key: 'statusName',
              },
              {
                title: '报修单号',
                dataIndex: 'repairNo',
                key: 'repairNo',
              },
              {
                title: '最新维修人员',
                dataIndex: 'newRepairUserName',
                key: 'newRepairUserName',
              },
              {
                title: '关单时间',
                dataIndex: 'repairCloseTime',
                key: 'repairCloseTime',
              },
            ]}
            type="wxgd"
          />
        );
      case 'detail_wgd':
        return (
          <Detail
            title="外协单号"
            titleno={drawer?.item.otherUnitsOrderNo}
            detailpath="/repair/umOtherUnitsOperation/queryOperationList"
            params={{ otherUnitsOrderId: drawer?.item.id }}
            baseRow={drawer?.item}
            basecolumns={[
              {
                title: '创建人',
                dataIndex: 'createUserName',
                key: 'createUserName',
              },
              {
                title: '创建时间',
                dataIndex: 'createTimes',
                key: 'createTimes',
              },
              {
                title: '工单状态',
                dataIndex: 'statusName',
                key: 'statusName',
              },
              {
                title: '来源工单',
                dataIndex: 'dataSourcesNo',
                key: 'dataSourcesNo',
              },
              {
                title: '来源类型',
                dataIndex: 'dataSourcesName',
                key: 'dataSourcesName',
              },
              {
                title: '最新外协人员',
                dataIndex: 'newRepairUserName',
                key: 'newRepairUserName',
              },
              {
                title: '关单时间',
                dataIndex: 'repairCloseTime',
                key: 'repairCloseTime',
              },
            ]}
            type="wgd"
          />
        );
      case 'detail_zzgd':
        return (
          <Detail
            title="追踪单号"
            titleno={drawer?.item?.taskOrderNo}
            detailpath="/repair/umTrackOperation/queryOperationList"
            params={{ trackOrderId: drawer?.item?.id }}
            baseRow={drawer?.item}
            basecolumns={[
              {
                title: '创建人',
                dataIndex: 'createUserName',
                key: 'createUserName',
              },
              {
                title: '创建时间',
                dataIndex: 'createTimes',
                key: 'createTimes',
              },
              {
                title: '工单状态',
                dataIndex: 'statusName',
                key: 'statusName',
              },
              {
                title: '来源工单',
                dataIndex: 'dataSourcesNo',
                key: 'dataSourcesNo',
              },
              {
                title: '来源类型',
                dataIndex: 'dataSourcesName',
                key: 'dataSourcesName',
              },
              {
                title: '最新追踪人员',
                dataIndex: 'newRepairUserName',
                key: 'newRepairUserName',
              },
              {
                title: '下次追踪日期',
                dataIndex: 'nextTrackDate',
                key: 'nextTrackDate',
              },
              {
                title: '关单时间',
                dataIndex: 'repairCloseTime',
                key: 'repairCloseTime',
              },
            ]}
            type="zzgd"
          />
        );
      default:
        break;
    }
  }
  return (
    <div style={{ position: 'relative' }}>
      <AutoTable
        pagetitle={<h3 className="page-title">接单平台</h3>}
        columns={columns}
        path={pathconfig?.list || '/ngic-auth/sysUser/query/page'}
        actionRef={actionRef}
        // pageextra={pathconfig?.enableadd ? 'add' : null}
        resizeable={false}
        addconfig={{
          // access: 'sysDepartment_save',
          btn: {
            disabled: false,
            onClick: () => {
              setdrawer((s) => ({
                ...s,
                open: true,
                item: null,
                title: '新增',
                val: 'add',
              }));
            },
          },
        }}
        tabList={getcolumns()}
        activeTabKey={activeTabKey}
        onTabChange={(key) => {
          setactiveTabKey(key);
        }}
      />

      <DrawerPro
        fields={columns}
        detailpath={pathconfig?.detail || null}
        detailData={drawer?.item}
        params={{ id: drawer?.item?.id }}
        formRef={formRef}
        placement="right"
        onClose={() => {
          setdrawer((s) => ({
            ...s,
            open: false,
          }));
        }}
        {...drawer}
        onFinish={(vals) => {
          if (drawer?.val == 'add') {
            run({ url: pathconfig?.add || '/add', params: { ...vals } });
          } else if (drawer?.val == 'edit') {
            run({ url: pathconfig?.edit || '/edit', params: { ...vals, id: drawer?.item?.id } });
          }
        }}
      >
        {selectType(drawer?.type)}
      </DrawerPro>
    </div>
  );
}

export default Platform;
