import * as React from 'react';
import { useState, useMemo, useRef } from 'react';
import DrawerPro from '@/components/DrawerPro';
import AutoTable from '@/components/AutoTable';
import PremButton from '@/components/PremButton';
import getcolumns from './columns';
import { useAsyncEffect, useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import extraColumns from '@/utils/extraColumns';
import { message } from 'antd';

function Supplier(props) {
  let actionRef = useRef(),
    formRef = useRef();
  const [drawer, setdrawer] = useState({
    open: false,
  });

  const [columns, setcolumns] = useState([
    {
      title: 'asd',
      key: 'ads',
    },
  ]);

  const pathconfig = useMemo(() => {
    let pathconf = getcolumns(setdrawer, changeState)?.pathconfig ?? {};
    return pathconf;
  }, []);

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

  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 edit = (text, row, _, action) => {
    return (
      <PremButton
        btn={{
          size: 'small',
          onClick: () => {
            setdrawer((s) => ({
              ...s,
              open: true,
              item: row,
              title: '编辑',
              val: 'edit',
            }));
          },
        }}
      >
        编辑
      </PremButton>
    );
  };

  const remove = (text, row, _, action) => {
    return (
      <PremButton
        pop={{
          title: '是否删除?',
          okText: '确认',
          cancelText: '取消',
          onConfirm: () => {
            run({ url: pathconfig?.delete || '/delete', params: { id: row?.id } });
          },
        }}
        btn={{
          size: 'small',
          type: 'danger',
        }}
      >
        删除
      </PremButton>
    );
  };

  function changeState(params) {
    doFetch({ url: '/sparepart/sparePartSupplier/stopAndStart', params }).then((res) => {
      if (res.code == '0000') {
        message.success('操作成功');
        actionRef?.current?.reload();
      }
    });
  }

  useAsyncEffect(async () => {
    let extracolumns = await extraColumns({
      url: '/base/paFormField/queryList',
      params: { formId: 4 },
    });
    extracolumns = extracolumns?.map((it) => ({
      ...it,
      hideInSearch: true,
    }));
    let defcolumn = getcolumns(setdrawer, changeState)?.columns ?? [];
    setcolumns([
      ...defcolumn,
      ...extracolumns,
      {
        title: '操作',
        valueType: 'option',
        width: 150,
        render: (text, row, _, action) => [
          // pathconfig?.enabledetail && detail(text, row, _, action),
          pathconfig?.enableedit && edit(text, row, _, action),
          pathconfig?.enabledelete && remove(text, row, _, action),
        ],
      },
    ]);
  }, []);

  return (
    <div style={{ position: 'relative' }}>
      <AutoTable
        pagetitle={<h3 className="page-title">备件供应商</h3>}
        columns={columns}
        actionRef={actionRef}
        path={pathconfig?.list || '/ngic-auth/sysUser/query/page'}
        pageextra={pathconfig?.enableadd ? 'add' : null}
        resizeable={false}
        addconfig={{
          // access: 'sysDepartment_save',
          btn: {
            disabled: false,
            onClick: () => {
              setdrawer((s) => ({
                ...s,
                open: true,
                item: { status: 1 },
                title: '新增',
                val: 'add',
              }));
            },
          },
        }}
      />

      <DrawerPro
        fields={columns}
        extendField="supplierCharList"
        params={{ id: drawer?.item?.id }}
        formRef={formRef}
        placement="right"
        detailpath={pathconfig?.detail || null}
        defaultFormValue={drawer?.item}
        onClose={() => {
          setdrawer((s) => ({
            ...s,
            open: false,
          }));
        }}
        {...drawer}
        onFinish={(vals) => {
          const newVals = JSON.parse(JSON.stringify(vals));
          const supplierCharReqList = [];
          for (let i in newVals) {
            if (!isNaN(i)) {
              supplierCharReqList.push({
                fieldId: i,
                fieldRealValue: newVals[i],
              });
              delete newVals[i];
            }
          }
          newVals.supplierCharReqList = supplierCharReqList;

          if (drawer?.val == 'add') {
            run({ url: pathconfig?.add || '/add', params: { ...newVals } });
          } else if (drawer?.val == 'edit') {
            run({ url: pathconfig?.edit || '/edit', params: { ...newVals, id: drawer?.item?.id } });
          }
        }}
      />
    </div>
  );
}

export default Supplier;