package com.yifu.cloud.plus.v1.batch.service;

import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * 电子档案导入服务接口
 *
 * @author huych
 * @date 2025-12-17
 */
public interface ElectronicArchiveImportService {

	/**
	 * 第一步：导入Excel模板文件
	 *
	 * @param inputStream Excel文件流
	 * @param fileName    文件名
	 * @return 导入结果
	 */
	R<?> importExcelTemplate(InputStream inputStream, String fileName);

	/**
	 * 第二步：导入ZIP文件
	 *
	 * @param file   ZIP文件
	 * @param taskId 任务ID
	 * @return 导入结果
	 */
	R<?> importZipFile(MultipartFile file, String taskId);

	/**
	 * 第三步：异步处理上传
	 *
	 * @param taskId   任务ID
	 * @param userId   用户ID
	 * @param userName 用户名
	 */
	void asyncProcessUpload(String taskId, String userId, String userName);

	/**
	 * 生成任务编号
	 *
	 * @return 任务编号
	 */
	String generateTaskCode();

	/**
	 * 单个新增人员附件（旧方法，保留用于兼容）
	 *
	 * @param empIdcard    身份证号
	 * @param empName      姓名
	 * @param deptNo       项目编码
	 * @param deptName     项目名称
	 * @param materialType 资料类型
	 * @param files        附件文件列表
	 * @return 上传结果
	 */
	R<?> uploadSinglePersonArchive(String empIdcard, String empName, String deptNo,
								   String deptName, String materialType, MultipartFile[] files);

	/**
	 * 单个新增人员附件（通过附件ID列表）
	 * 前端先调用文件上传接口获取附件ID列表，再调用此方法更新附件的domainId
	 *
	 * @param empIdcard    身份证号
	 * @param empName      姓名
	 * @param deptNo       项目编码
	 * @param deptName     项目名称
	 * @param materialType 资料类型
	 * @param attaIdList   附件ID列表
	 * @return 上传结果
	 */
	R<?> uploadSinglePersonArchiveByAttaIds(String empIdcard, String empName, String deptNo,
											String deptName, String materialType, java.util.List<String> attaIdList);
}

