package com.zt.plat.module.base.service.doctemplate.render.provider;

import com.zt.plat.module.base.service.doctemplate.render.DocTemplateDataSourceType;
import com.zt.plat.module.base.service.doctemplate.render.IDataSourceProvider;
import com.zt.plat.module.base.service.doctemplate.render.ISqlConfigProvider;
import lombok.extern.slf4j.Slf4j;

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

/**
 * SQL配置数据源提供者实现
 * 执行SQL配置查询并返回结果
 *
 * @author hwc
 */
@Slf4j
public class DocTemplateSqlConfigFieldDataSourceProvider implements IDataSourceProvider {

    private final ISqlConfigProvider sqlConfigProvider;
    private final String sqlConfigId;

    public DocTemplateSqlConfigFieldDataSourceProvider(ISqlConfigProvider sqlConfigProvider, String sqlConfigId) {
        this.sqlConfigProvider = sqlConfigProvider;
        this.sqlConfigId = sqlConfigId;
        log.debug("创建SQL配置数据源提供者: {}", sqlConfigId);
    }

    @Override
    public Map<String, Object> getData(Object context, List<String> fieldNames) {
        if (sqlConfigProvider == null) {
            log.warn("SQL配置提供者为空");
            return Map.of();
        }

        try {
            log.debug("执行SQL配置查询: {}", sqlConfigId);
            List<Map<String, Object>> results = sqlConfigProvider.querySqlConfig(sqlConfigId);

            if (results == null || results.isEmpty()) {
                log.debug("SQL配置查询无结果");
                return Map.of();
            }

            // 返回第一行结果（通常SQL配置查询应该返回单行）
            Map<String, Object> result = results.get(0);
            log.debug("SQL配置查询结果字段: {}", result.keySet());
            return result;

        } catch (Exception e) {
            log.error("SQL配置查询失败: {}", sqlConfigId, e);
            return Map.of();
        }
    }

    @Override
    public DocTemplateDataSourceType getType() {
        return DocTemplateDataSourceType.SQL_CONFIG;
    }
}