package com.cf.imes.module.report.service.datasource;

import com.bstek.datasource.bean.PreviewParams;
import com.bstek.ureport.definition.dataset.Field;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;

import jakarta.validation.Valid;
import java.util.List;

/**
 * 报表数据源 Service 接口
 *
 * @author Gqr
 * @since 2024/7/8 11:01
 */
public interface ReportDatasourceService {
    /**
     * 创建报表数据源
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDatasource(@Valid ReportDatasourceSaveReqVO createReqVO);

    /**
     * 更新报表数据源
     *
     * @param updateReqVO 更新信息
     */
    void updateDatasource(@Valid ReportDatasourceSaveReqVO updateReqVO);

    /**
     * 删除报表数据源
     *
     * @param id 编号
     */
    void deleteDatasource(Long id);

    /**
     * 获得报表数据源
     *
     * @param id 编号
     * @return 报表数据源
     */
    ReportDatasourceDO getDatasource(Long id);

    /**
     * 获取模板下的数据源列表
     *
     * @param organId 组织id
     * @return 报表数据源分页
     */
    List<ReportDatasourceDO> getDatasourceList(Long organId);

    /**
     * 获取springbean数据源列表
     *
     * @return
     */
    List<ReportBeanDatasourceRespVO> getBeanDatasourceList();

    /**
     * 获取bean方法
     *
     * @param beanId
     * @return
     */
    List<String> loadBeanMethods(String beanId);

    /**
     * 获取数据源表字段
     *
     * @param previewParams 连接信息请求
     * @return
     */
    List<Field> getTableFields(PreviewParams previewParams);

    /**
     * 获取数据源
     *
     * @param clazz
     * @return
     */
    List<Field> getSpringBeanResultFieldList(String clazz);
}
