/* 编号规则
 * @Author: Li Hanlin
 * @Date: 2022-11-09 14:44:44
 * @Last Modified by: Li Hanlin
 * @Last Modified time: 2023-01-30 18:43:49
 */

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 { doFetch } from '@/utils/doFetch';
import { message } from 'antd';
import AddRules from './AddRules';
import _ from 'lodash';

function Rules(props) {
  let actionRef = useRef(),
    formRef = useRef();
  const [drawer, setDrawer] = useState({
    visible: false,
  });

  const urlParams = {
    save: '/base/bmNumberRule/save',
    remove: '/base/bmNumberRule/deleteByNoTypeId',
    list: '/base/bmNumberRule/queryList',
    detail: '/base/bmNumberRule/queryByNoTypeId',
  };

  const detail = (text, row, _, action) => {
    return (
      <PremButton
        btn={{
          size: 'small',
          onClick: () => {
            setDrawer((s) => ({
              ...s,
              visible: true,
              item: row,
              title: '详情',
              val: 'detail',
              title: row.userName + '的详细信息',
            }));
          },
        }}
      >
        详情
      </PremButton>
    );
  };

  const edit = (text, row, i, action) => {
    return (
      <PremButton
        btn={{
          size: 'small',
          onClick: () => {
            setDrawer((s) => ({
              ...s,
              visible: true,
              detailpath: urlParams.detail,
              params: { noTypeId: row?.id },
              title: '编辑',
              val: 'edit',
              onFinish: async (vals) => {
                console.log(vals);
                vals.nrList.other = _.pick(vals.nrList.other, [
                  'formatType',
                  'increaseList',
                  'noRuleCode',
                  'sort',
                ]);
                vals.nrList.value = vals.nrList.value.map((it) => {
                  return _.pick(it, [
                    'formatType',
                    'id',
                    'noContent',
                    'noRuleCode',
                    'sort',
                    'paramList',
                  ]);
                });
                let params = { ...vals };
                params.nrList = [];
                params.nrList = params.nrList.concat(vals?.nrList.value);
                if (vals?.nrList.other.sort) {
                  vals.nrList.other.increaseList = Array.from(
                    Array(vals?.nrList.value.length + 1),
                    (_, index) => index + 1,
                  ).filter((it) => it !== vals?.nrList.other.sort + 1);
                  params.nrList.splice(vals?.nrList.other.sort, 0, vals?.nrList.other);
                  params.nrList.forEach?.((it, i) => {
                    it.sort = i + 1;
                  });
                } else {
                  message.warning('请选择顺序递增规则的位置！');
                  return;
                }
                params.id = row?.id;
                let res = await doFetch({
                  url: urlParams.save,
                  params,
                });
                if (res.code === '0000') {
                  message.success('编辑成功！');
                  setDrawer((s) => ({
                    ...s,
                    visible: false,
                  }));
                  actionRef.current.reload();
                }
              },
            }));
          },
        }}
      >
        编辑
      </PremButton>
    );
  };

  const remove = (text, row, _, action) => {
    return (
      <PremButton
        pop={{
          title: '是否删除该规则?',
          okText: '确认',
          cancelText: '取消',
          onConfirm: async () => {
            let res = await doFetch({ url: urlParams.remove, params: { noTypeId: row.id } });
            if (res.code === '0000') {
              message.success('删除成功！');
              setDrawer((s) => ({
                ...s,
                visible: false,
              }));
              actionRef.current.reload();
            }
          },
        }}
        btn={{
          size: 'small',
          type: 'danger',
        }}
      >
        删除
      </PremButton>
    );
  };

  const columns = useMemo(() => {
    let defcolumn = getcolumns(setDrawer);
    return defcolumn.concat({
      title: '操作',
      valueType: 'option',
      width: 150,
      render: (text, row, _, action) => [edit(text, row, _, action), remove(text, row, _, action)],
    });
  }, []);

  return (
    <div style={{ position: 'relative' }}>
      <AutoTable
        pagetitle={<h3 className="page-title">编号规则</h3>}
        columns={columns}
        pagination={false}
        path={urlParams.list}
        actionRef={actionRef}
        pageextra={'add'}
        resizeable={false}
        addconfig={{
          // access: 'sysDepartment_save',
          btn: {
            type: 'primary',
            disabled: false,
            onClick: () => {
              setDrawer((s) => ({
                ...s,
                visible: true,
                item: null,
                detailpath: null,
                title: '新增',
                val: 'add',
                onFinish: async (vals) => {
                  console.log(vals);
                  let params = { ...vals };
                  params.nrList = [];
                  params.nrList = params.nrList.concat(vals?.nrList.value);
                  if (vals?.nrList.other.sort) {
                    // vals.nrList.other.increaseList = Array.from(
                    //   Array(vals?.nrList.value.length + 1),
                    //   (_, index) => index + 1,
                    // ).filter((it) => it !== vals?.nrList.other.sort + 1);
                    params.nrList.splice(vals?.nrList.other.sort, 0, vals?.nrList.other);
                    let arr = [];
                    params.nrList.forEach?.((it, i) => {
                      it.sort = i + 1;
                    });
                    console.log(arr);
                    params.nrList.forEach((it) => {
                      if (it.noRuleCode == 'increasing_order') {
                        let increaseListArr = [];
                        it.increaseList.forEach((id) => {
                          increaseListArr = params.nrList
                            .filter((item) => item?.id == id)
                            .map((it) => {
                              return it?.sort;
                            });
                        });
                        arr = increaseListArr;
                      }
                    });
                    params.nrList.forEach((it) => {
                      if (it.noRuleCode == 'increasing_order') {
                        it.increaseList = arr;
                      }
                    });
                  } else {
                    message.warning('请选择顺序递增规则的位置！');
                    return;
                  }
                  let res = await doFetch({
                    url: urlParams.save,
                    params,
                  });
                  if (res.code === '0000') {
                    message.success('新增成功！');
                    setDrawer((s) => ({
                      ...s,
                      visible: false,
                    }));
                    actionRef.current.reload();
                  }
                },
              }));
            },
          },
        }}
      />

      <DrawerPro
        fields={columns}
        // detailpath={urlParams.detail}
        // params={{ id: drawer?.item?.id }}
        defaultFormValue={drawer?.item ?? {}}
        formRef={formRef}
        placement="right"
        onClose={() => {
          setDrawer((s) => ({
            ...s,
            visible: false,
          }));
        }}
        {...drawer}
      />
    </div>
  );
}

export default Rules;
