package cn.fateverse.query.service;

import cn.fateverse.common.decrypt.entity.EncryptOption;
import cn.fateverse.query.entity.dto.DataAdapterDto;
import cn.fateverse.query.entity.vo.DataAdapterVo;
import cn.fateverse.query.entity.query.DataAdapterQuery;
import cn.fateverse.common.core.entity.Option;
import cn.fateverse.common.core.result.page.TableDataInfo;

import java.util.List;

/**
 * 数据源适配器 Service
 *
 * @author clay
 * @date 2023-10-29
 */
public interface DataAdapterService {

    /**
     * 查询数据源适配器
     *
     * @param adapterId 数据源适配器Id
     * @return 数据源适配器
     */
    DataAdapterVo searchById(Long adapterId);

    /**
     * 查询数据源适配器列表
     *
     * @param query 数据源适配器
     * @return 数据源适配器集合
     */
    TableDataInfo<DataAdapterVo> searchList(DataAdapterQuery query);

    /**
     * 查询数据源适配器option
     *
     * @return 选项集合
     */
    List<EncryptOption> searchOptionList();

    /**
     * 导出数据源适配器列表
     *
     * @param query query 数据源适配器
     * @return 数据源适配器集合
     */
    List<DataAdapterVo> exportList(DataAdapterQuery query);


    /**
     * 执行代码,并返回结果
     *
     * @param dataAdapter 适配器对象
     * @return 执行结果
     */
    Object mockExecute(DataAdapterDto dataAdapter);

    /**
     * 新增数据源适配器
     *
     * @param dataAdapter 数据源适配器
     * @return 结果
     */
    int save(DataAdapterDto dataAdapter);

    /**
     * 修改数据源适配器
     *
     * @param dataAdapter 数据源适配器
     * @return 结果
     */
    int edit(DataAdapterDto dataAdapter);

    /**
     * 删除数据源适配器
     *
     * @param adapterId 需要删除的数据源适配器Id
     * @return 结果
     */
    int removeDataAdapterById(Long adapterId);

    /**
     * 批量删除数据源适配器
     *
     * @param adapterIdList 需要删除的数据源适配器Id 集合
     * @return 结果
     */
    int removeBatch(List<Long> adapterIdList);
}