package org.dromara.zhishu.handler;

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.handler.context.SheetWriteHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;

@Slf4j
public class EmptyListTipHandler implements SheetWriteHandler {

    private final java.util.Map<Integer, String> tipMap = new java.util.HashMap<>();
    private CellStyle cachedTipStyle;
    private boolean executed = false;

    public EmptyListTipHandler() {
        tipMap.put(5, "表头文字不要有任何改动。");      // 第6行
        tipMap.put(7, "发布商品任务ISBN、价格、库存列必须有且必填。");  // 第8行
        tipMap.put(8, "修改价格、库存、上下架状态任务 ISBN、商品ID、商品编码必填其中一个");  // 第9行
        tipMap.put(10, "用鼠标指向每列的标题都有详细的说明。");  // 第11行
    }

    @Override
    public void afterSheetCreate(SheetWriteHandlerContext context) {
        if (executed) {
            return;
        }

        Sheet sheet = context.getWriteSheetHolder().getSheet();

        // 检查是否有数据行（除了表头之外的行）
        // 在 Sheet 刚创建时，还没有数据，所以这个方法会在数据写入之前执行
        // 我们需要判断是否为空 LIST，这个判断在调用方做

        // 设置L列宽度
        sheet.setColumnWidth(11, 80 * 256);

        // 创建提示行
        Workbook workbook = sheet.getWorkbook();
        CellStyle tipStyle = getOrCreateTipStyle(workbook);

        for (java.util.Map.Entry<Integer, String> entry : tipMap.entrySet()) {
            int rowIndex = entry.getKey();
            Row row = sheet.getRow(rowIndex);
            if (row == null) {
                row = sheet.createRow(rowIndex);
            }
            Cell cell = row.getCell(11);
            if (cell == null) {
                cell = row.createCell(11);
            }
            cell.setCellValue(entry.getValue());
            cell.setCellStyle(tipStyle);
        }

        executed = true;
        log.info("空LIST场景：已在L6、L8、L9、L11添加提示文字");
    }

    private CellStyle getOrCreateTipStyle(Workbook workbook) {
        if (cachedTipStyle == null) {
            Font font = workbook.createFont();
            font.setBold(true);
            font.setFontHeightInPoints((short) 12);
            font.setColor(IndexedColors.RED.getIndex());

            cachedTipStyle = workbook.createCellStyle();
            cachedTipStyle.setFont(font);
            cachedTipStyle.setWrapText(true);
            cachedTipStyle.setAlignment(HorizontalAlignment.LEFT);
            cachedTipStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        }
        return cachedTipStyle;
    }
}