package jnpf.personnels.service;

import jnpf.model.personnels.vo.roster.FtbRosterImportFormFieldsConfigVO;
import jnpf.model.personnels.vo.roster.FtbRosterImportVO;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public interface FtbPersonnelsStaffRosterImportService {

    /**
     * 执行名单导入
     *
     * @param inputStream 包含要导入学员数据的输入流
     * @return FtbRosterImportVO 返回一个包含导入结果的对象，包括成功或失败的详情
     * @throws IOException 如果读取输入流过程中出现问题
     */
    FtbRosterImportVO rosterImport(InputStream inputStream) throws IOException;

    /**
     * 异常数据导出
     *
     * @param id 导出操作的标识，用于确定要导出的数据范围或类型
     * @throws IOException 如果文件写入过程中出现问题
     */
    void exceptionDataExport(String id) throws IOException;

    /**
     * 正常数据导入
     *
     * @param id 导入操作的标识，用于确定数据来源或导入的数据范围
     */
    void normalDataImport(String id);

    /**
     * 获取表单字段配置信息列表
     * <p>
     * 该方法用于获取一个包含所有表单字段配置信息的列表，这些配置信息用于指导如何导入花名册数据
     * 它返回的是一个List对象，其中每个元素都是一个FtbRosterImportFormFieldsConfigVO实例，代表一个表单字段的配置信息
     *
     * @return List<FtbRosterImportFormFieldsConfigVO> 包含表单字段配置信息的列表
     */
    List<FtbRosterImportFormFieldsConfigVO> formFieldsConfig(Integer type);

    /**
     * 下载新的花名册导入模板
     * 此方法用于根据用户信息和表单字段生成并下载一个新的花名册导入模板
     * 它允许用户根据需要自定义导入模板，从而简化数据导入过程
     *
     * @param formFields 表单字段列表，指定需要包含在模板中的字段
     *                   这允许模板根据用户的具体需求进行定制
     */
    void rosterImportTemplateDownloadNew(List<String> formFields) throws IOException;

    /**
     * 从输入流中导入花名册信息
     * 此方法用于解析输入流中的数据，并将其转换为花名册导入对象（FtbRosterImportVO）
     * 主要用途是处理文件上传或网络传输来的花名册数据，便于进一步的数据处理或存储
     *
     * @param inputStream 输入流，包含花名册数据的二进制流
     * @return FtbRosterImportVO 转换后的花名册导入对象，包含解析出的花名册信息
     */
    FtbRosterImportVO rosterImportNew(InputStream inputStream);
}
