package com.ruoyi.ccdi.project.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.ccdi.project.domain.dto.CcdiFileUploadQueryDTO;
import com.ruoyi.ccdi.project.domain.entity.CcdiFileUploadRecord;
import com.ruoyi.ccdi.project.domain.vo.CcdiFileUploadStatisticsVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文件上传服务接口
 *
 * @author ruoyi
 * @date 2026-03-05
 */
public interface ICcdiFileUploadService {

    /**
     * 批量上传文件
     *
     * @param projectId 项目ID
     * @param files 文件数组
     * @param username 上传人
     * @return 批次ID
     */
    String batchUploadFiles(Long projectId, MultipartFile[] files, String username);

    /**
     * 解析身份证文件
     *
     * @param file Excel 文件
     * @return 身份证号列表
     */
    List<String> parseIdCardFile(MultipartFile file);

    /**
     * 提交拉取行内/金综流水任务
     *
     * @param projectId 项目ID
     * @param idCards 身份证号列表
     * @param dataChannelCode 数据渠道编码
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param userId 当前登录用户ID
     * @param username 当前登录用户名
     * @return 批次ID
     */
    String submitPullBankInfo(Long projectId,
                              List<String> idCards,
                              String dataChannelCode,
                              String startDate,
                              String endDate,
                              Long userId,
                              String username);

    /**
     * 删除上传记录并清理关联数据
     *
     * @param id 上传记录ID
     * @param operatorUserId 当前操作用户ID
     * @return 删除结果
     */
    String deleteFileUploadRecord(Long id, Long operatorUserId);

    /**
     * 查询上传记录列表
     *
     * @param page 分页参数
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    Page<CcdiFileUploadRecord> selectPage(Page<CcdiFileUploadRecord> page,
                                          CcdiFileUploadQueryDTO queryDTO);

    /**
     * 统计各状态文件数量
     *
     * @param projectId 项目ID
     * @return 统计结果
     */
    CcdiFileUploadStatisticsVO countByStatus(Long projectId);

    /**
     * 根据ID查询记录详情
     *
     * @param id 记录ID
     * @return 记录详情
     */
    CcdiFileUploadRecord getById(Long id);
}
