import React, {useEffect, useMemo, useState} from 'react';
import {Input, Tree} from 'antd';
import {FolderOutlined, FileMarkdownOutlined} from '@ant-design/icons';
import "./index.less"
const {Search} = Input;
import store from "../../redux/store";
import {clickFile} from "../../redux/clickFile_reducer";

const defaultData = [];
// 将树平铺用于查找
const dataList = [];
const generateList = (data) => {
    for (let i = 0; i < data.length; i++) {
        const node = data[i];
        const {key, title, icon} = node;
        dataList.push({
            key,
            title,
            icon
        });
        if (node.children) {
            generateList(node.children);
        }
    }
};
generateList(defaultData);
const getParentKey = (key, tree) => {
    let parentKey;
    for (let i = 0; i < tree.length; i++) {
        const node = tree[i];
        if (node.children) {
            if (node.children.some((item) => item.key === key)) {
                parentKey = node.key;
            } else if (getParentKey(key, node.children)) {
                parentKey = getParentKey(key, node.children);
            }
        }
    }
    return parentKey;
};

function generateChildList(fileList) {
    const result = []
    for (let i = 0; i < fileList.length; i++) {
        const {fileName, filePath, dirFlag} = fileList[i];
        result.push({
            "key": filePath,
            "title": fileName,
            "icon": <FolderOutlined/>,
            "dirFlag": dirFlag,
            "children": []
        });
    }
    return result;
}

const ItemTree = () => {
    const [expandedKeys, setExpandedKeys] = useState([]);
    const [searchValue, setSearchValue] = useState('');
    const [defaultValueState, setDefaultValueState] = useState([]);
    const [autoExpandParent, setAutoExpandParent] = useState(true);

    useEffect(() => {
        store.subscribe(() => {
            let fileDirDate = store.getState().dirMessage.data;
            console.log("打开目录fileDirDate:", fileDirDate)
            for (let i = 0; i < fileDirDate.length; i++) {
                const node = fileDirDate[i];
                console.log("node:", node)
                const {fileName, filePath, childList, dirFlag} = node;
                const childListM = []
                if (childList.length > 0) {
                    childListM.push(...generateChildList(childList));
                }
                if (defaultData.filter(fileMessage =>
                    fileMessage.key === filePath
                ).length === 0) {
                    defaultData.push({
                        "key": filePath,
                        "title": fileName,
                        "icon": <FolderOutlined/>,
                        "dirFlag": dirFlag,
                        "children": childListM
                    });
                }
            }
            console.log("Array.from(new Set(defaultData)):", Array.from(new Set(defaultData)))
            setDefaultValueState(Array.from(new Set(defaultData)))
        })
    }, [])

    const onExpand = (newExpandedKeys) => {
        setExpandedKeys(newExpandedKeys);
        setAutoExpandParent(false);
    };
    const onChange = (e) => {
        const {value} = e.target;
        const newExpandedKeys = dataList
            .map((item) => {
                if (item.title.indexOf(value) > -1) {
                    return getParentKey(item.key, defaultData);
                }
                return null;
            })
            .filter((item, i, self) => !!(item && self.indexOf(item) === i));
        setExpandedKeys(newExpandedKeys);
        setSearchValue(value);
        setAutoExpandParent(true);
    };
    const onSelect = (selectedKeys, e) => {
        if (e.selected && !e.node.dirFlag) {
            console.log('onSelect.selectedKeys', selectedKeys, e)
            store.dispatch(clickFile({"fileName": e.node.title, "filePath": e.node.key}))
        }
    }
    // const treeData = useMemo(() => {
    //     const loop = (data) =>
    //         data.map((item) => {
    //             const strTitle = item.title;
    //             const index = strTitle.indexOf(searchValue);
    //             const beforeStr = strTitle.substring(0, index);
    //             const afterStr = strTitle.slice(index + searchValue.length);
    //             const title =
    //                 index > -1 ? (
    //                     <span>{beforeStr}
    //                         <span className="site-tree-search-value">{searchValue}</span>{afterStr}</span>
    //                 ) : (
    //                     <span>{strTitle}</span>
    //                 );
    //             if (item.children) {
    //                 return {
    //                     title,
    //                     key: item.key,
    //                     icon: item.icon,
    //                     children: loop(item.children),
    //                 };
    //             }
    //             return {
    //                 title,
    //                 icon: item.icon,
    //                 key: item.key,
    //             };
    //         });
    //     return loop(defaultData);
    // }, [searchValue]);
    return (
        <div>
            <Search
                style={{marginBottom: 8,}}
                placeholder="Search"
                onChange={onChange}
            />
            <Tree
                // 展开/收起节点时触发
                onExpand={onExpand}
                //（受控）展开指定的树节点
                expandedKeys={expandedKeys}
                // 是否自动展开父节点
                autoExpandParent={autoExpandParent}
                showIcon={true}
                // treeNodes 数据，如果设置则不需要手动构造 TreeNode 节点（key 在整个树范围内唯一）
                treeData={defaultValueState}
                onSelect={onSelect}
            />
        </div>
    );
};
export default ItemTree;