package com.rongwei.sfcommon.sys.service.impl;

import com.aspose.words.IMailMergeDataSource;
import com.aspose.words.ref.Ref;

import java.util.List;
import java.util.Map;

public class CustomMailMergeDataSource implements IMailMergeDataSource {
    private List<Map<String, String>> dataList;  // 数据源
    private int index = -1;  // 当前行的索引
    private final String tableName;
    // 构造函数
    public CustomMailMergeDataSource(List<Map<String, String>> dataList , String tableName) {
        this.dataList = dataList;
        this.tableName = tableName;
    }

    // 实现 getTableName() 方法
    @Override
    public String getTableName() {
        return tableName; // 例如返回 Word 模板中的区域名
    }

    // 实现 moveNext() 方法
    @Override
    public boolean moveNext() {
        index++;  // 游标向前移动
        return index < dataList.size();  // 如果还有数据，返回 true
    }

    // 实现 getValue() 方法
    @Override
    public boolean getValue(String var1, Ref<Object> var2) {
        if (index >= 0 && index < dataList.size()) {
            Map<String, String> currentItem = dataList.get(index);  // 获取当前行的数据
            String value = currentItem.get(var1);  // 获取字段值
            var2.set(value);  // 将值设置到 Ref 对象中
            return value != null;  // 如果字段有值，返回 true
        }
        return false;  // 如果没有数据，返回 false
    }

    // 实现 getChildDataSource() 方法
    @Override
    public IMailMergeDataSource getChildDataSource(String var1) {
        return null;  // 如果没有子数据源，可以返回 null，或者根据需求返回一个子数据源
    }

    // 重置数据源游标
    public void reset() {
        index = -1;  // 将索引重置到初始位置
    }
}
