package com.izouma.uwip.service;

import com.alibaba.fastjson.JSON;
import com.izouma.uwip.domain.Maintenance;
import com.izouma.uwip.dto.PageQuery;
import com.izouma.uwip.repo.MaintenanceRepo;
import com.izouma.uwip.utils.JpaUtils;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

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

@Service
@AllArgsConstructor
public class MaintenanceService {

    private MaintenanceRepo maintenanceRepo;

    public Page<Maintenance> all(PageQuery pageQuery) {
        return maintenanceRepo.findAll(JpaUtils.toSpecification(pageQuery, Maintenance.class), JpaUtils.toPageRequest(pageQuery));
    }

    public List<Maintenance> getTree(List<?> list1, Long parentId) {

        String s = JSON.toJSONString(list1);
        List<Maintenance> list = JSON.parseArray(s, Maintenance.class);

        Map<Long, Maintenance> dtoMap = new HashMap<>();
        for (Maintenance node : list) {
            dtoMap.put(node.getId(), node);
        }

        List<Maintenance> resultList = new ArrayList<>();
        if (parentId == null) {
            for (Map.Entry<Long, Maintenance> entry : dtoMap.entrySet()) {
                Maintenance node = entry.getValue();
                if (node.getParent() == null) {
                    // 如果是顶层节点，直接添加到结果集合中
                    resultList.add(node);
                } else {
                    // 如果不是顶层节点，找其父节点，并且添加到父节点的子节点集合中
                    if (dtoMap.get(node.getParent()) != null) {
                        dtoMap.get(node.getParent()).getChildren().add(node);
                    }
                }
            }
        } else {
            for (Map.Entry<Long, Maintenance> entry : dtoMap.entrySet()) {
                Maintenance node = entry.getValue();
                if (node.getParent().equals(parentId)) {
                    // 如果是顶层节点，直接添加到结果集合中
                    resultList.add(node);
                } else {
                    // 如果不是顶层节点，找其父节点，并且添加到父节点的子节点集合中
                    if (dtoMap.get(node.getParent()) != null) {
                        dtoMap.get(node.getParent()).getChildren().add(node);
                    }
                }
            }
        }
        return resultList;
    }
}
