package com.taais.biz.service;

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

import com.taais.biz.domain.Data;
import com.taais.biz.domain.vo.BatchDataResult;
import com.taais.biz.domain.dto.DataAmplifyDto;
import com.taais.biz.domain.vo.DataSelectVo;
import com.taais.biz.domain.vo.DataVo;
import com.taais.biz.domain.bo.DataBo;
import com.taais.common.core.core.domain.CommonResult;
import com.taais.common.orm.core.service.IBaseService;
import com.taais.common.core.core.page.PageResult;
import org.springframework.web.multipart.MultipartFile;

/**
 * 数据管理Service接口
 *
 * @author km
 * 2024-06-14
 */
public interface IDataService extends IBaseService<Data> {
    /**
     * 查询批次情况
     *
     * @return 数据批次信息
     */
    List<BatchDataResult> batchSelect();

    /**
     * 查询数据管理
     *
     * @param id 数据管理主键
     * @return 数据管理
     */
        DataVo selectById(Long id);

    /**
     * 查询数据管理列表
     *
     * @param dataBo 数据管理Bo
     * @return 数据管理集合
     */
    List<DataVo> selectList(DataBo dataBo);

    /**
     * 上传数据集
     *
     * @param file 文件
     * @param dataInfo 数据表单
     * @return 数据管理集合
     */
    CommonResult<Boolean> uploadDataInfo(MultipartFile file, Data dataInfo);

    /**
     * 数据扩增
     *
     * @param dataAmplifyDto 数据表单
     * @return 数据管理集合
     */
    CommonResult<Boolean> dataAmplify(DataAmplifyDto dataAmplifyDto);

    /**
     * 分页查询数据管理列表
     *
     * @param dataBo 数据管理Bo
     * @return 分页数据管理集合
     */
    PageResult<DataVo> selectPage(DataBo dataBo);

    /**
     * 新增数据管理
     *
     * @param dataBo 数据管理Bo
     * @return 结果:true 操作成功，false 操作失败
     */
    boolean insert(DataBo dataBo);

    /**
     * 修改数据管理
     *
     * @param dataBo 数据管理Bo
     * @return 结果:true 更新成功，false 更新失败
     */
    boolean update(DataBo dataBo);

    /**
     * 批量删除数据管理
     *
     * @param ids 需要删除的数据管理主键集合
     * @return 结果:true 删除成功，false 删除失败
     */
    boolean deleteByIds(Long[] ids);

    List<Data> selectByIds(List<Long> ids);

    /**
     * 根据传入字段 获取数据库中所有该字段的类型
     *
     * @param field 字段
     * @return {@link List }<{@link String }>
     */
    List<DataSelectVo>  getFormSelects(String field);

    CommonResult<Boolean> amplifyForData(String id);
}
