package com.yice.webadmin.app.service;

import com.yice.common.core.base.service.IBaseService;
import com.yice.common.core.object.MyPageParam;
import com.yice.webadmin.app.data.DatasetDataClean;
import com.yice.webadmin.app.data.DatasetDataDeduplicate;
import com.yice.webadmin.app.data.DatasetDataDesensitive;
import com.yice.webadmin.app.data.DatasetDataFilter;
import com.yice.webadmin.app.model.DatasetCleanConfig;

import java.util.List;

/**
 * 数据集导出数据操作服务接口。
 *
 * @author linking
 * @date 2023-04-13
 */
public interface DatasetCleanConfigService extends IBaseService<DatasetCleanConfig, Long> {

    /**
     * 保存新增对象。
     *
     * @param datasetCleanConfig 新增对象。
     * @return 返回新增对象。
     */
    DatasetCleanConfig saveNew(DatasetCleanConfig datasetCleanConfig);

    /**
     * 利用数据库的insertList语法，批量插入对象列表。
     *
     * @param datasetCleanConfigList 新增对象列表。
     */
    void saveNewBatch(List<DatasetCleanConfig> datasetCleanConfigList);

    /**
     * 更新数据对象。
     *
     * @param datasetCleanConfig         更新的对象。
     * @param originalDatasetCleanConfig 原有数据对象。
     * @return 成功返回true，否则false。
     */
    boolean update(DatasetCleanConfig datasetCleanConfig, DatasetCleanConfig originalDatasetCleanConfig);

    /**
     * 删除指定数据。
     *
     * @param cleanId 主键Id。
     * @return 成功返回true，否则false。
     */
    boolean remove(Long cleanId);

    /**
     * 获取单表查询结果。由于没有关联数据查询，因此在仅仅获取单表数据的场景下，效率更高。
     * 如果需要同时获取关联数据，请移步(getDatasetCleanConfigListWithRelation)方法。
     *
     * @param filter  过滤对象。
     * @param orderBy 排序参数。
     * @return 查询结果集。
     */
    List<DatasetCleanConfig> getDatasetCleanConfigList(DatasetCleanConfig filter, String orderBy);

    /**
     * 获取主表的查询结果，以及主表关联的字典数据和一对一从表数据，以及一对一从表的字典数据。
     * 该查询会涉及到一对一从表的关联过滤，或一对多从表的嵌套关联过滤，因此性能不如单表过滤。
     * 如果仅仅需要获取主表数据，请移步(getDatasetCleanConfigListWithRelation)，以便获取更好的查询性能。
     *
     * @param filter  主表过滤对象。
     * @param orderBy 排序参数。
     * @return 查询结果集。
     */
    List<DatasetCleanConfig> getDatasetCleanConfigListWithRelation(DatasetCleanConfig filter, String orderBy);

    /**
     * 查询数据集重复列表集合
     * @param filter 清洗标识
     * @param pageParam 页码参数
     * @return 返回查看对象列表
     */
    List<DatasetDataDeduplicate> getDatasetDeduplicateList(DatasetDataDeduplicate filter, MyPageParam pageParam);

    /**
     * 查询数据集过滤列表集合
     * @param filter 清洗标识
     * @param pageParam 页码参数
     * @return 返回查看对象列表
     */
    List<DatasetDataFilter> getDatasetFilterList(DatasetDataFilter filter, MyPageParam pageParam);

    /**
     * 查询数据集清洗列表集合
     * @param filter 清洗标识
     * @param pageParam 页码参数
     * @return 返回查看对象列表
     */
    List<DatasetDataClean> getDatasetCleanList(DatasetDataClean filter, MyPageParam pageParam);

    /**
     * 查询数据集重复总个数
     * @param filter 清洗对象
     * @return 返回查看对象列表
     */
    Long getDeduplicateCount(DatasetDataDeduplicate filter);

    /**
     * 查询数据集清洗总个数
     * @param filter 清洗对象
     * @return 返回查看对象列表
     */
    Long getCleanCount(DatasetDataClean filter);

    /**
     * 查询数据集过滤总个数
     * @param filter 清洗对象
     * @return 返回查看对象列表
     */
    Long getFilterCount(DatasetDataFilter filter);

    /**
     * 查询数据集隐私列表集合
     * @param filter 清洗标识
     * @param pageParam 页码参数
     * @return 返回查看对象列表
     */
    List<DatasetDataDesensitive> getDatasetDesensitiveList(DatasetDataDesensitive filter, MyPageParam pageParam);

    /**
     * 查询数据集隐私总个数
     * @param filter 清洗对象
     * @return 返回查看对象列表
     */
    Long getDesensitiveCount(DatasetDataDesensitive filter);

    /**
     * 保存数据集去隐私100条数据新增对象。
     *
     * @param desensitives 新增对象。
     * @return 返回新增对象。
     */
    void saveDatasetDesensitive(List<DatasetDataDesensitive> desensitives);

    /**
     * 保存数据集去重100条数据新增对象。
     *
     * @param deduplicates 新增对象。
     * @return 返回新增对象。
     */
    void saveDatasetDeduplicate(List<DatasetDataDeduplicate> deduplicates);

    /**
     * 保存数据集过滤100条数据新增对象。
     *
     * @param filters 新增对象。
     * @return 返回新增对象。
     */
    void saveDatasetFilter(List<DatasetDataFilter> filters);

    /**
     * 保存数据集清洗100条数据新增对象。
     *
     * @param cleans 新增对象。
     * @return 返回新增对象。
     */
    void saveDatasetClean(List<DatasetDataClean> cleans);
}
