package tech.easyflow.datacenter.execution.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.row.Row;
import tech.easyflow.datacenter.execution.model.DatacenterQueryRequest;
import tech.easyflow.datacenter.execution.model.DatacenterSchemaResponse;
import tech.easyflow.datacenter.execution.model.DatacenterSqlQueryRequest;
import tech.easyflow.datacenter.execution.model.DatasetRef;

import java.util.List;
import java.util.function.Consumer;

public interface DatacenterDatasetQueryService {

    /**
     * 分页查询结构化数据集。
     *
     * @param request 查询请求
     * @return 分页结果
     */
    Page<Row> queryPage(DatacenterQueryRequest request);

    /**
     * 执行原生 SQL 并返回完整结果。
     *
     * @param request SQL 查询请求
     * @return 完整结果
     */
    List<Row> queryBySql(DatacenterSqlQueryRequest request);

    /**
     * 使用单次数据库查询流式消费原生 SQL 结果。
     *
     * @param request SQL 查询请求
     * @param fetchSize JDBC 建议拉取行数
     * @param consumer 单行消费者
     */
    void consumeBySql(
            DatacenterSqlQueryRequest request,
            int fetchSize,
            Consumer<Row> consumer);

    /**
     * 获取数据集结构。
     *
     * @param datasetRef 数据集引用
     * @return 数据集结构
     */
    DatacenterSchemaResponse getSchema(DatasetRef datasetRef);

    /**
     * 仅解析数据集定位信息，不加载版本和血缘。
     *
     * @param datasetRef 数据集引用
     * @return 包含 source、catalog、table 的轻量响应
     */
    DatacenterSchemaResponse getLocation(DatasetRef datasetRef);
}
