package com.njcn;

import com.njcn.gather.tools.report.util.Docx4jUtil;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.Tbl;

import javax.xml.bind.JAXBElement;
import java.io.File;
import java.util.Arrays;
import java.util.List;

/**
 * 动态表格生成测试
 *
 * @author hongawen
 * @version 1.0
 * @date 2025/9/21
 */
public class DynamicTableTest {

    public static void main(String[] args) {
        try {
            // 测试场景1：2个回路，7个检测项目（与result.png一致）
            testScenario1();

            // 测试场景2：1个回路，只检测电压和频率
            testScenario2();

            // 测试场景3：4个回路，多个检测项目
            testScenario3();

            System.out.println("所有测试场景执行完成！");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试场景1：2个回路，7个检测项目（模拟result.png的数据）
     */
    public static void testScenario1() throws Exception {
        System.out.println("=== 测试场景1：2个回路，7个检测项目 ===");

        // 创建Word文档
        WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
        MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();
        ObjectFactory factory = new ObjectFactory();

        // 1. 添加标题
        P titleP = factory.createP();
        Docx4jUtil.createTitle(factory, titleP, "检测结果（场景1：2回路7项目）", 32, true);
        mainDocumentPart.getContent().add(titleP);

        // 2. 检测项目配置
        List<String> testItems = Arrays.asList(
            "电压",
            "电压不平衡度",
            "电流不平衡度",
            "谐波电压",
            "谐波电流",
            "间谐波电压",
            "短时间闪变"
        );

        // 3. 检测结果数据（模拟result.png中的数据）
        String[][] testResults = {
            {"不合格", "不合格"},     // 电压
            {"无法比较", "无法比较"},  // 电压不平衡度
            {"合格", "合格"},         // 电流不平衡度
            {"合格", "合格"},         // 谐波电压
            {"合格", "合格"},         // 谐波电流
            {"不合格", "不合格"},     // 间谐波电压
            {"无法比较", "无法比较"}   // 短时间闪变
        };

        // 4. 定义回路名称
        List<String> circuitNames = Arrays.asList("测量回路 1", "测量回路 2");

        // 5. 生成动态表格（包含说明内容）
        JAXBElement<Tbl> table = Docx4jUtil.createDynamicTestResultTable(
            factory, testItems, circuitNames, testResults, "不合格",
            "部分值", "200", "去除最大最小值");
        mainDocumentPart.getContent().add(table);

        // 6. 保存文档
        File outputFile = new File("检测结果_场景1_2回路7项目.docx");
        wordPackage.save(outputFile);
        System.out.println("文档已保存：" + outputFile.getAbsolutePath());
    }

    /**
     * 测试场景2：1个回路，只检测电压和频率
     */
    public static void testScenario2() throws Exception {
        System.out.println("=== 测试场景2：1个回路，2个检测项目 ===");

        WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
        MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();
        ObjectFactory factory = new ObjectFactory();

        // 标题
        P titleP = factory.createP();
        Docx4jUtil.createTitle(factory, titleP, "检测结果（场景2：1回路2项目）", 32, true);
        mainDocumentPart.getContent().add(titleP);

        // 简单的检测项目
        List<String> testItems = Arrays.asList("电压", "频率");

        // 1个回路的检测结果
        String[][] testResults = {
            {"不合格"},  // 电压
            {"合格"}     // 频率
        };

        // 定义回路名称
        List<String> circuitNames = Arrays.asList("#1母线");

        // 生成表格（包含说明内容）
        JAXBElement<Tbl> table = Docx4jUtil.createDynamicTestResultTable(
            factory, testItems, circuitNames, testResults, "不合格",
            "任意值", "100", "取第一个满足条件的数据");
        mainDocumentPart.getContent().add(table);

        File outputFile = new File("检测结果_场景2_1回路2项目.docx");
        wordPackage.save(outputFile);
        System.out.println("文档已保存：" + outputFile.getAbsolutePath());
    }

    /**
     * 测试场景3：4个回路，多个检测项目
     */
    public static void testScenario3() throws Exception {
        System.out.println("=== 测试场景3：4个回路，5个检测项目 ===");

        WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
        MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();
        ObjectFactory factory = new ObjectFactory();

        // 标题
        P titleP = factory.createP();
        Docx4jUtil.createTitle(factory, titleP, "检测结果（场景3：4回路5项目）", 32, true);
        mainDocumentPart.getContent().add(titleP);

        // 检测项目
        List<String> testItems = Arrays.asList(
            "电压", "频率", "电压不平衡度", "谐波电压", "间谐波电压"
        );

        // 4个回路的检测结果
        String[][] testResults = {
            {"不合格", "合格", "合格", "不合格"},      // 电压
            {"合格", "合格", "合格", "合格"},         // 频率
            {"无法比较", "无法比较", "合格", "合格"},  // 电压不平衡度
            {"合格", "不合格", "合格", "合格"},       // 谐波电压
            {"不合格", "不合格", "不合格", "合格"}    // 间谐波电压
        };

        // 定义回路名称（自定义名称示例）
        List<String> circuitNames = Arrays.asList("主变高压侧", "主变低压侧", "备用线路1", "备用线路2");

        // 生成表格（包含说明内容）
        JAXBElement<Tbl> table = Docx4jUtil.createDynamicTestResultTable(
            factory, testItems, circuitNames, testResults, "不合格",
            "平均值", "300", "取算术平均值");
        mainDocumentPart.getContent().add(table);

        File outputFile = new File("检测结果_场景3_4回路5项目.docx");
        wordPackage.save(outputFile);
        System.out.println("文档已保存：" + outputFile.getAbsolutePath());
    }
}