package com.youchain.utils;

import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.read.listener.ReadListener;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class FastExcelCellListener implements ReadListener<Map<Integer, String>> {
    private final Map<String, String> cellValues = new HashMap<>();
    private final Set<String> targetCells = new HashSet<>();
    private boolean isCellRead = false;

    /**
     * 添加目标单元格
     * @param row 行索引（从0开始）
     * @param col 列索引（从0开始）
     * @return 当前监听器实例，支持链式调用
     */
    public FastExcelCellListener addTargetCell(int row, int col) {
        targetCells.add(row + "-" + col);
        return this;
    }

    @Override
    public void invoke(Map<Integer, String> data, AnalysisContext context) {
        if (isCellRead) {
            return;
        }
        int currentRowIndex = context.readRowHolder().getRowIndex()-1;

        for (String targetCell : targetCells) {
            String[] parts = targetCell.split("-");
            int targetRow = Integer.parseInt(parts[0]);
            int targetCol = Integer.parseInt(parts[1]);

            if (currentRowIndex == targetRow-1) {
                String cellValue = data.get(targetCol-1);
                if (cellValue != null) {
                    cellValues.put(targetCell, cellValue);
                }
            }
        }

        // 检查是否所有目标单元格都已读取
        if (cellValues.size() == targetCells.size()) {
            isCellRead = true;
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 可根据需要添加逻辑
    }

    /**
     * 获取指定单元格的值
     * @param row 行索引（从0开始）
     * @param col 列索引（从0开始）
     * @return 单元格值
     */
    public String getCellValue(int row, int col) {
        return cellValues.get(row + "-" + col);
    }

    /**
     * 获取所有单元格值
     * @return 所有单元格值的Map
     */
    public Map<String, String> getAllCellValues() {
        return new HashMap<>(cellValues);
    }
}
