package com.ruoyi.cms.util;

import com.alibaba.excel.EasyExcel;
import com.ruoyi.common.core.domain.entity.JobTitle;

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

/**
 * 工具类：读取 Excel 并构建树结构
 */
public class JobTitleUtils {

    /**
     * 读取 Excel 文件并转换为 JobTitle 列表
     */
    public static List<JobTitle> readExcel(String filePath) {
        // 读取 Excel 文件
        List<JobTitleExcel> excelDataList = EasyExcel.read(filePath)
                .head(JobTitleExcel.class)
                .sheet()
                .doReadSync();

        // 构建树结构
        return buildTree(excelDataList);
    }

    /**
     * 构建树结构
     */
    private static List<JobTitle> buildTree(List<JobTitleExcel> excelDataList) {
        Map<String, JobTitle> level1Map = new HashMap<>(); // 一级分类缓存
        Map<String, JobTitle> level2Map = new HashMap<>(); // 二级分类缓存
        List<JobTitle> result = new ArrayList<>(); // 最终结果

        long jobId = 1; // 自增 ID

        for (JobTitleExcel excelData : excelDataList) {
            // 处理一级分类
            JobTitle level1 = level1Map.get(excelData.getLevel1());
            if (level1 == null) {
                level1 = new JobTitle();
                level1.setJobId(jobId++);
                level1.setJobName(excelData.getLevel1());
                level1.setParentId(0L); // 根节点
                level1Map.put(excelData.getLevel1(), level1);
                result.add(level1);
            }

            // 处理二级分类
            JobTitle level2 = level2Map.get(excelData.getLevel2());
            if (level2 == null) {
                level2 = new JobTitle();
                level2.setJobId(jobId++);
                level2.setJobName(excelData.getLevel2());
                level2.setParentId(level1.getJobId()); // 父节点为一级分类
                level2Map.put(excelData.getLevel2(), level2);
                level1.getChildren().add(level2);
            }

            // 处理三级分类
            JobTitle level3 = new JobTitle();
            level3.setJobId(jobId++);
            level3.setJobName(excelData.getLevel3());
            level3.setParentId(level2.getJobId()); // 父节点为二级分类
            level2.getChildren().add(level3);
        }

        return result;
    }
}
