package org.springblade.system.tool;

import org.springblade.common.core.domain.entity.SysDept;
import org.springblade.system.domain.ArchivalCatalogueDto;
import org.springblade.system.domain.DaKyProFilesContentsDto;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author：liang.chao
 * @Date：2025/9/9 - 15:27
 */
public class TreeBuilder {
    public static List<DaKyProFilesContentsDto> buildTreeDaKyProFilesContents(List<DaKyProFilesContentsDto> list) {
        // 过滤已删除的数据（del_flag = '0' 表示已删除）
        List<DaKyProFilesContentsDto> validList = list.stream()
                .filter(item -> "1".equals(item.getDelFlag()))
                .collect(Collectors.toList());

        // 使用 Map 提升查找效率
        Map<String, DaKyProFilesContentsDto> map = new HashMap<>();
        List<DaKyProFilesContentsDto> roots = new ArrayList<>();

        // 第一步：将所有节点放入 map
        for (DaKyProFilesContentsDto item : validList) {
            map.put(item.getId(), item);
        }

        // 第二步：构建父子关系
        for (DaKyProFilesContentsDto item : validList) {
            String parentId = item.getParentId();
            // 如果 parent_id 为 null，则为根节点
            if (parentId == null || parentId.equals("") || parentId.equals("1")) {
                roots.add(item);
            } else {
                DaKyProFilesContentsDto parent = map.get(parentId);
                if (parent != null) {
                    parent.getChildren().add(item);
                }
            }
        }

        return roots;
    }

	/**
	 * 将扁平的列表构建成树形结构
	 * @param list 数据库查询出的所有未删除的记录
	 * @return 树的根节点列表
	 */
	public static List<ArchivalCatalogueDto> buildTree(List<ArchivalCatalogueDto> list) {
		// 过滤已删除的数据（del_flag = '0' 表示已删除）
		List<ArchivalCatalogueDto> validList = list.stream()
			.filter(item -> "1".equals(item.getDelFlag()))
			.collect(Collectors.toList());

		// 使用 Map 提升查找效率
		Map<Integer, ArchivalCatalogueDto> map = new HashMap<>();
		List<ArchivalCatalogueDto> roots = new ArrayList<>();

		// 第一步：将所有节点放入 map
		for (ArchivalCatalogueDto item : validList) {
			map.put(item.getId(), item);
		}

		// 第二步：构建父子关系
		for (ArchivalCatalogueDto item : validList) {
			Integer parentId = item.getParentId();
			// 如果 parent_id 为 null，则为根节点
			if (parentId == null || parentId.equals("") || parentId.equals("0")) {
				roots.add(item);
			} else {
				ArchivalCatalogueDto parent = map.get(parentId);
				if (parent != null) {
					parent.getChildren().add(item);
				}
			}
		}

		return roots;
	}

    public static List<SysDept> buildDeptTree(List<SysDept> list) {
        // 使用 Map 提升查找效率
        Map<Long, SysDept> map = new HashMap<>();
        List<SysDept> roots = new ArrayList<>();

        // 第一步：将所有节点放入 map
        for (SysDept item : list) {
            map.put(item.getDeptId(), item);
        }

        // 第二步：构建父子关系
        for (SysDept item : list) {
            Long parentId = item.getParentId();
            // 如果 parent_id 为 null，则为根节点
            if (parentId == 0) {
                roots.add(item);
            } else {
                SysDept parent = map.get(parentId);
                if (parent != null) {
                    parent.getChildren().add(item);
                }
            }
        }

        return roots;
    }

}
