package com.backendsys.modules.ai.chat.service.impl;

import com.backendsys.modules.ai.chat.dao.ChatModelDao;
import com.backendsys.modules.ai.chat.entity.ChatModel;
import com.backendsys.modules.ai.chat.service.ChatModelService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

@Service
public class ChatModelServiceImpl implements ChatModelService {

    @Autowired
    private ChatModelDao chatModelDao;

    /**
     * 将平铺的列表转换为树型结构
     * @param list 平铺的列表
     * @return 树型结构的列表
     */
    private List<ChatModel> convertToTree(List<ChatModel> list) {
        // 创建一个map，用于存储id和对应的ChatModel对象
        Map<Long, ChatModel> nodeMap = new HashMap<>();
        List<ChatModel> rootNodes = new ArrayList<>(); // 存储顶级节点
        // 遍历列表，将所有节点放入map中
        for (ChatModel node : list) {
            nodeMap.put(node.getId(), node);
        }
        // 遍历列表，为每个节点找到其父节点
        for (ChatModel node : list) {
            Long parentId = node.getParent_id();
            if (parentId == -1) {
                // 如果parent_id为-1，说明是顶级节点
                rootNodes.add(node);
            } else {
                // 如果不是顶级节点，找到其父节点并添加到父节点的children中
                ChatModel parentNode = nodeMap.get(parentId);
                if (parentNode != null) {
                    if (parentNode.getChildren() == null || parentNode.getChildren().size() == 0) {
                        parentNode.setChildren(new ArrayList<>());
                    }
                    parentNode.getChildren().add(node);
                }
            }
        }
        return rootNodes;
    }

    /**
     * 获取模型列表
     */
    @Override
    public List<ChatModel> selectChatModelList() {
        List<ChatModel> list = chatModelDao.selectList(new LambdaQueryWrapper<ChatModel>().eq(ChatModel::getStatus, 1));
        return convertToTree(list);
    }



}
