import { useState } from 'react';
import { removeEmptyResponseChildren } from '@/generated/services/utils';

export default function useTableExpand(requestTableList: any) {
  const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([]);

  const fetchData = (params: any, sorter?: Record<string, any>, filter?: Record<string, any>) => {
    return requestTableList(params, sorter, filter)
      .then((res: any) => removeEmptyResponseChildren(res))
      .then((res: any) => {
        const newExpandedKeys: string[] = [];
        const render = (items: any[]) => {
          items.forEach((item) => {
            Object.assign(item, { key: item.key || item.id }); // set key
            if (item.children) {
              newExpandedKeys.push(item.key);
              render(item.children);
            }
          });
          return newExpandedKeys;
        };
        setExpandedRowKeys(render(res.data));
        return res;
      });
  };

  const onExpand = (expanded: boolean, record: Record<string, any>) => {
    if (expanded) {
      setExpandedRowKeys(expandedRowKeys.concat(record.key));
    } else {
      setExpandedRowKeys(expandedRowKeys.filter((key) => record.key !== key));
    }
  };

  return { expandedRowKeys, setExpandedRowKeys, fetchData, onExpand };
}
